Como posso criar uma lista de pastas nomeadas no Windows automaticamente?

12

Então, estou estudando um curso on-line que tem centenas de sub palestras. Eu preciso baixar o código-fonte para cada palestra em uma subpasta correspondente. Com mais de 120 palestras, criar uma subpasta, uma por uma, é um processo meticuloso.

Aqui está minha estrutura de pastas atual:

Existe uma maneira de criar todas essas subpastas de uma vez, junto com o nome correto, por meio de um arquivo em lotes ou algo semelhante.

    
por Manish Giri 16.11.2015 / 22:37

5 respostas

27

Como posso criar todas essas subpastas de uma só vez usando meu esquema de nomenclatura?

If I were to create the sub-folders in a specific directory, such as C:\Dropbox\Development, would I need to cd to that directory first? Assuming I'm using the cmd shell?

Para criar as subpastas (subdiretórios) em um diretório específico (que não é o diretório atual), siga um destes procedimentos:

  • cd C:\Dropbox\Development primeiro ou
  • Altere o comando md Lec-%%i para md C:\Dropbox\Development\Lec-%%i .

Nota:

  • mkdir é sinônimo de md e pode ser usado em seu lugar.

Abaixo, mostro as duas alternativas, primeiro de um cmd shell (linha de comando) e segundo usando um arquivo em lotes.

Como bônus (embora não seja solicitado na pergunta original), também há uma alternativa bash shell.

De um shell cmd :

cd C:\Dropbox\Development
for /l %i in (9,1,120) do md Lec-%i

ou

for /l %i in (9,1,120) do md C:\Dropbox\Development\Lec-%i

De um arquivo em lotes:

@echo off
cd C:\Dropbox\Development
for /l %%i in (9,1,120) do md Lec-%%i

Ou

@echo off
for /l %%i in (9,1,120) do md C:\Dropbox\Development\Lec-%%i

Notas:

  • 9 é o número inicial. Mude se necessário.
  • 1 é o passo. Não mude isso.
  • 120 o número final. Altere se necessário para o número do último diretório que você precisa.
  • Para criar arquivos em outro diretório, você pode

    • cd C:\Dropbox\Development\Lec-%%i primeiro ou
    • altere o comando md para md C:\Dropbox\Development\Lec-%%i .

Existe uma maneira de fazer algo semelhante no Mac OSX a partir do terminal Mac?

De um shell bash :

for i in {9..120}; do mkdir Lec-$i; done; 

Ou (para uma versão mais portátil)

for i in 'seq 9 120'; do mkdir Lec-$i; done;

Leitura Adicional

por 16.11.2015 / 22:45
22

Existe outra maneira fácil, para um número limitado de pastas. Pode ser útil aqui ou para outra pessoa.

No Windows, podemos criar nomes de pastas numeradas, criando uma pasta "lec (1)" e copiar colando quantas vezes quisermos, se colarmos 10 vezes, haverá 11 pastas com nomes "lect (1)" para "lec (10) - Copiar"

O único truque aqui é que a primeira pasta deve incluir parênteses (n), onde n é o número de onde a numeração começa.

O Windows inclui "- copy" no e do nome da pasta colada "lec (1) - Copy": (

Se você não gostar, basta selecionar all e renomear primeiro lec (1) - > lec- (1) ou qualquer coisa.

Todos os nomes das pastas serão ajustados e "- copy" será removido;)

  • Ctrl + C - Copiar
  • Ctrl + V - Colar
  • F2 - renomear
  • Enter - para terminar de renomear.
  • ESC- para cancelar a renomeação.
  • Ctrl + A ou Ctrl + UP para selecionar pastas.

    
por 17.11.2015 / 03:21
2

Isso não será melhor do que um script para seu cenário específico, mas é bom saber disso quando os nomes das pastas não estão relacionados: você pode criar vários diretórios a partir da linha de comando, separando-os por um espaço:

C:\temp\animals>dir
 Volume in drive C is Windows
 Volume Serial Number is 82CB-BB0F

 Directory of C:\temp\animals

11/16/2015  03:55 PM    <DIR>          .
11/16/2015  03:55 PM    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  1,636,846,243,840 bytes free

C:\temp\animals>mkdir cats dogs penguins

C:\temp\animals>dir
 Volume in drive C is Windows
 Volume Serial Number is 82CB-BB0F

 Directory of C:\temp\animals

11/16/2015  03:55 PM    <DIR>          .
11/16/2015  03:55 PM    <DIR>          ..
11/16/2015  03:55 PM    <DIR>          cats
11/16/2015  03:55 PM    <DIR>          dogs
11/16/2015  03:55 PM    <DIR>          penguins
               0 File(s)              0 bytes
               5 Dir(s)  1,636,846,178,304 bytes free
    
por 16.11.2015 / 22:58
1

Você pode descobrir que, se criar pastas numeradas com esse nome, elas não serão exibidas na ordem de classificação adequada (esperada):

C:\Dropbox\Development> dir /b
Lec-10
Lec-100
Lec-101
Lec-102
Lec-103
Lec-104
Lec-105
Lec-106
Lec-107
Lec-108
Lec-109
Lec-11
Lec-110
Lec-111
Lec-112
Lec-113
Lec-114
Lec-115
Lec-116
Lec-117
Lec-118
Lec-119
Lec-12
Lec-120
Lec-13
Lec-14
Lec-15
Lec-16
Lec-17
Lec-18
Lec-19
Lec-20
Lec-21
...
Lec-89
Lec-9
Lec-90
Lec-91
...

O problema é que a parte numérica dos nomes das pastas é de largura variável, o que afeta como as pastas são classificadas.

Se for importante para você que as pastas sejam classificadas corretamente, use o arquivo em lotes abaixo para criar pastas com a parte numerada dos nomes de pastas preenchidos com "0's" (zero) para que todos os números tenham o mesmo comprimento, como este:

C:\Dropbox\Development> dir /b
Lec-009
Lec-010
Lec-011
Lec-012
Lec-013
Lec-014
Lec-015
Lec-016
Lec-017
Lec-018
Lec-019
Lec-020
Lec-021
...

Aqui está o arquivo em lote:

@echo off

for /L %%f in (9,1,120) do call :work 000%%f
goto :EOF


:work

set "dx=%~1"
set "dx=%dx:~-3%"

md "C:\Dropbox\Development\Lec-%dx%" >nul 2>&1

set "dx="
goto :EOF
    
por 17.11.2015 / 11:38
0

Você pode executar esse arquivo em lotes na mesma pasta que os arquivos. Cada arquivo será movido para uma pasta com o mesmo nome.

for /f "delims=" %%a in ('dir /b') do (
if not "%%~fa"=="%~f0" (
md "%%~na" 2>nul
if exist "%%a" move "%%~na.*" "%%~na"
)
)

Eu uso com um aviso abaixo para evitar o uso acidental.

@echo off
echo.
set sure=
set /p sure=you want to put each file in this folder into their own folders? 
if /i "%sure%"=="" exit
if /i "%sure:~0,1%"=="n" exit
if /i not "%sure:~0,1%"=="y" (exit) else (echo.&echo are you sure? Close window to cancel or..)
echo.&pause 
for /f "delims=" %%a in ('dir /b') do (
if not "%%~fa"=="%~f0" (
md "%%~na" 2>nul
if exist "%%a" move "%%~na.*" "%%~na"
)
)
    
por 17.11.2015 / 22:02