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


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:

enter image description here

Existe uma maneira que eu possa criar todas essas sub-pastas de uma só vez, juntamente com o nome próprio, através de um arquivo em lotes ou algo similar.


12


origem


@WesSayeed Não tenho certeza do que você quer dizer. Isso não apagaria todas as pastas? Eu estou olhando para criar pastas de 9 todo o caminho para 122 (ou quantas já o número de palestras que estão lá). - Manish Giri
Como você mencionou especificamente os arquivos em lote e de script, não vou postar isso como uma resposta, mas real super usuários sabem que é muito mais fácil apenas pegar a ferramenta certa para o trabalho em vez de escrever a sua própria;). Basta usar uma ferramenta de renomeação e provavelmente você pode descobrir isso em menos de um minuto, incluindo o download. Eu pessoalmente usei Renomear mestre e Renomear Utilitário em Massa (contém anúncios) e ambos podem lidar com isso e muitas outras operações irritantes de arquivos e pastas. (Eu não sou afiliado a nenhuma das ferramentas.) - Lilienthal
Use um programa como Certo para baixar. Tem uma versão gratuita. Cada arquivo deve ser baixado em sua própria casa. - JDługosz


Respostas:


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

Se eu fosse criar as subpastas em um diretório específico, como C: \ Dropbox \ Development, eu precisaria criar um cd para esse diretório primeiro? Assumindo que estou usando o shell cmd?

Para criar as subpastas (subdiretórios) em um diretório específico (que não é o diretório atual), você pode executar um dos seguintes procedimentos:

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

Nota:

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

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

Como bónus (embora não seja solicitado na pergunta original) existe um bash Alternativa shell também.


A partir de um cmd Concha:

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, o número do último diretório desejado.
  • Para criar arquivos em outro diretório, você pode

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

Existe uma maneira de fazer uma coisa semelhante para o Mac OSX do terminal Mac?

A partir de um bash Concha:

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


27



Se eu fosse criar as subpastas em um diretório específico, como C:\Dropbox\Development, eu precisaria cd para esse diretório primeiro? Assumindo que estou usando o cmd Concha? E muito obrigado! - Manish Giri
@Manish sim, você precisaria cd para a pasta primeiro. - LPChip
Não. Basta mudar o md Lec-%%i para md C:\Dropbox\Development\Lec-%%i - DavidPostill♦
Ao invés de md porque não usar mkdir no Windows? Dessa forma, é consistente com * nix e uma diferença a menos para as pessoas se lembrarem. - Mehrdad
@ Mehrdad Vou adicionar uma nota para esse efeito. - DavidPostill♦


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) - Cópia "

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.

enter image description here


22



+1 por me ensinar algo que eu não sabia. :) - LPChip
A animação (".gif") é um toque agradável, mas repeti-la várias e várias vezes ... infinitamente, é muito chato. - Kevin Fegan
@ KevinFegan eu discordo. Os GIFs em loop garantem que o usuário (você) consiga realmente ver a animação sem recarregar a página e rolá-la rapidamente para tentar vê-la. A maioria dos navegadores não oferece botões de controle GIF. - phyrfox
resposta impressionante e apenas parar de assistir depois de chegar ao ponto! - happytime harry
Isso não funcionará se você não quiser parênteses no nome da sua pasta. Por exemplo, posso criar uma lista de pastas: x (0), x (1), x (2), ... x (N). Mas eu não posso criar uma lista: x0, x1, x2, ... xN - Gil Epshtain


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

2



É bom você apontar isso, mas não responde à pergunta ... - DavidPostill♦
@DavidPostill. Eu concordo, e é por isso que eu escrevi do jeito que eu fiz. Mas é MUITO melhor do que criar pastas 1 por 1. Talvez eu deva excluir a resposta e fazer um comentário? - TTT


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 tamanho, da seguinte forma:

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 lotes:

@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

1



Como eles classificam é dependente de ferramentas. O Explorer (e a maioria dos outros gerenciadores de arquivos) os classificará intuitivamente, com Lec-10 vindo depois Lec-9. - afrazier
Explorer usa o tipo natural assim 2 será colocado antes 10 como seria de se esperar (se você olhar a captura de tela do OP, ela também é classificada antes de 10). Somente dir sofre com esse problema e precisa 0 preenchimentos, mas o OP não sabia muito sobre a linha de comando, então eu não acho que vai ser um problema - phuclv
@phuclv - Sim, como você diz, "OP não sabia muito sobre a linha de comando ...". É por isso que escrevi esta resposta. Deixar o OP saber o que esperar e fornecer uma solução (resposta). Eu poderia imaginar OP usando a ótima resposta de DavidPostill, então ficar confuso para ver dir listando pastas fora de ordem. Windows como você e afrazier mencionado, o Windows Explorer classificará / listará as pastas corretamente, mas o OP estava procurando batch solução que significa que eles estarão (muito provavelmente) trabalhando a partir do command prompt. - Kevin Fegan


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"
)
)

0