Script em lote para criar várias pastas dentro de várias pastas

1

Eu tentei um monte de coisas e muita pesquisa, mas nada do que eu tentei fez o que eu preciso.

Estou tentando criar uma estrutura de pastas de várias pastas dentro de outra pasta. Os nomes das pastas são separados por vírgulas em um loop de script em lote.

Agora preciso criar outro heap de subpastas, mas preciso que elas estejam abaixo da subpasta do primeiro nível que foi criada pela outra lista separada por nomes de pasta de vírgulas.

Exemplo de estrutura de pastas

 - Main folder
   - Sub folder A
      - Sub folder 1
      - Sub folder 2
      - Sub folder 3
      - Sub folder 4 
   - Sub folder B
      - Sub folder 1
      - Sub folder 2
      - Sub folder 3
      - Sub folder 4 
   - Sub folder C
      - Sub folder 1
      - Sub folder 2
      - Sub folder 3
      - Sub folder 4

Consegui criar todas as subpastas "principais" A,B,C , mas não tive sorte em criar as subpastas 1,2,3.. do novo heap abaixo do primeiro heap de subpastas criadas como A,B,C

for %%x in (A,B,C) do md %%x
    
por Lazyas123 20.09.2017 / 02:23

3 respostas

2

Você pode criar uma variável com o A,B,C set, criar outra variável com o 1,2,3,4 set e, em seguida, colocar cada conjunto em um FOR loop e iterar cada valor de variável de acordo com cada conjunto para obter A1, A2, A3, B1, B2, B3 e assim por diante, garantindo que cada combinação seja iterada.

Basta usar o comando MD para criar as combinações de diretórios anexadas ao diretório raiz, em que as subpastas principais do grupo A conjunto separado por vírgulas residirá.

Exemplo de script

Certifique-se de definir o valor RootDir= como o caminho completo para a pasta pai que conterá as pastas de lista do grupo A definidas como a variável SubA= .

@ECHO ON
SET RootDir=C:\Main
SET SubA=A,B,C,D,E
SET SubB=1,2,3,4,5
FOR %%A IN (%SubA%) DO FOR %%B IN (%SubB%) DO IF NOT EXIST "%RootDir%\%%~A\%%~B" MD "%RootDir%\%%~A\%%~B"
EXIT

Mais recursos

por 20.09.2017 / 04:45
0

Dado um layout de, por exemplo:

Main Folder 
     Sub Folder A
        Sub Folder 1
        [...]
        Sub Folder 4
     Sub Folder B 
        Sub folder 1 
        [...]
        Sub Folder 4 
     [...]

A resposta mais simples (mesmo que seja bastante entediante e força bruta) é simplesmente escrever mkdir linhas para cada subpasta final:

mkdir "Main Folder\Sub Folder A\Sub Folder 1"
mkdir "Main Folder\Sub Folder A\Sub Folder 2"
mkdir "Main Folder\Sub Folder A\Sub Folder 3"
mkdir "Main Folder\Sub Folder A\Sub Folder 4"

Repita isso quantas vezes precisar e simplesmente altere os nomes das pastas.

Se um diretório não existir inicialmente, ele será criado. Se existir, uma pasta será criada nela. Então, a primeira linha:

mkdir "Main Folder\Sub Folder A\Sub Folder 1"

criará todas as três pastas mostradas enquanto esta linha:

mkdir "Main Folder\Sub Folder Z\Sub Folder 1"

cria apenas a segunda e terceira pasta (já que Main Folder já existe).

Como você indicou, você queria caracteres especiais (espaços e vírgulas), você precisa envolver cada comando com aspas (como mostrado). Para pastas sem quaisquer caracteres especiais (por exemplo, Folder1\Folder2 ), as cotações são desnecessárias.

Eu não incluí letras de unidade, pois suponho que o arquivo .bat esteja no mesmo diretório em que você deseja criar Main Folder e suas subpastas.

    
por 20.09.2017 / 04:55
0

O powershell pode fazer isso.

$root = "\*\folderA"

ForEach ($dir in (Get-Item -Path "$root\*\" | ?{$_.PSIsContainer})){

If (!(Test-Path -Path "\*\FolderA")) {

    New-Item -Path "$root\*\" -Name "Folder1" -ItemType Directory | Out-Null

}

}

Repita a parte New-Item -Path "$root\*\" -Name "Folder1" -ItemType Directory | Out-Null para cada subpasta

    
por 20.09.2017 / 05:49

Tags