Como recursivamente criar subpasta em cada pasta de um diretório no CMD

1

Digamos que eu tenha um diretório chamado Grandparent
Dentro deste diretório existem várias outras pastas, Parent 1 , Parent 2 , etc. Meu objetivo é criar uma nova pasta, Child , dentro de cada uma das pastas Parent .

Por exemplo, o que eu tenho:

Grandparent/
    Parent1/
    Parent2/
    ...
    ...
    ParentX/

O que eu quero:

Grandparent/
    Parent1/
        Child/
    Parent2/
        Child/
    ...
    ...
    ParentX/
        Child/

Existe uma maneira de fazer isso no CMD? (Nota: não consigo baixar o Powershell ou qualquer outra ferramenta conveniente que facilite minha vida, estou preso ao Prompt de Comando padrão do Windows)

Atualizar

Seguindo os links nos comentários, tentei o seguinte:

for /r %%a in (.) do (
  rem enter the directory
  pushd %%a
  echo In Directory:
  mkdir testFolder
  cd
  rem leave the directory
  popd
)

No entanto, isso cria a pasta testFolder em todas as pastas recém-criadas:

Grandparent/
    Parent1/
        Child/
            Child/
                Child/
                    ...
    Parent2/
        Child/
            Child/
                Child/
                    ...
    ...
    ...
    ParentX/
        Child/
            Child/
                Child/
                    ...
    Child/
        Child/
            Child/
                ...
    
por amallard 25.03.2017 / 15:22

1 resposta

1

No entanto, isso cria a pasta testFolder em todas as pastas recém-criadas

Isso ocorre porque o comando for /r está atualizando a lista de arquivos a serem processados toda vez que você cria um novo diretório, portanto, é realmente útil apenas se você quiser visitar uma lista fixa de diretórios.

Aqui está um arquivo de lote (test.cmd) que fará o que você deseja. Coloque-o no diretório Grandparent .

test.cmd:

@echo off
setlocal
for /f "usebackq tokens=*" %%a in ('dir /b /a:d') do (
  rem enter the directory
  pushd %%a
  echo In Directory: %%a
  md child
  rem leave the directory
  popd
  )
endlocal

Notas:

  • dir /b /a:d é avaliado uma vez, então a lista de diretórios é fixada
  • for /f passará por essa lista fixa exatamente uma vez.

Exemplo de saída:

> test
In Directory: Documentation
In Directory: subdir
In Directory: test
In Directory: test with space
In Directory: test1

> dir /b /a:d /s child
F:\test\Documentation\child
F:\test\subdir\child
F:\test\test\child
F:\test\test with space\child
F:\test\test1\child

Leitura Adicional

  • Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
  • dir - Exibe uma lista de arquivos e subpastas.
  • para / f - Comando Loop contra os resultados de outro comando.
  • md - Criar diretório - Cria uma nova pasta.
  • pushd - Altere o diretório / pasta atual e armazene a pasta / caminho anterior para uso pelo comando POPD.
  • popd - Altere o diretório de volta para o caminho / pasta armazenado mais recentemente pelo comando PUSHD.
por 25.03.2017 / 16:17