Como criar várias pastas no powershell

3

Em cmd pode ser usado o comando mkdir /data/rs1 /data/rs2 /data/rs3 como:

Tudoestácorreto:

Mas como perceber isso em powershell?

Estou tentando usar aspas, por exemplo:

Comaspasestourecebendoapenasumapastaetendooproblemanopowershell: 

mkdir : Could not find part of the path "rs3".
строка:1 знак:1
+ mkdir "/data/rs1 /data/rs2 /data/rs3"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (C:\data\rs1 \data\rs2 \data\rs3:String) [New-Item], DirectoryNotFoundException
    + FullyQualifiedErrorId : CreateDirectoryIOError,Microsoft.PowerShell.Commands.NewItemCommand

Sem qoutes também o problema e não tem pastas :

mkdir : Can not find a positional parameter that takes an argument"/data/rs2".
строка:1 знак:1
+ mkdir /data/rs1 /data/rs2 /data/rs3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [mkdir], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,mkdir

Para evitar os problemas, posso escrever sem espaços:

PS C:\data> mkdir /data/rs1/data/rs2/data/rs3

Mas será uma pasta rs1 que contém dentro de rs2 e rs3 :

C:\data\rs1\data\rs2\data\rs3

Agradeço qualquer ajuda.

    
por invzbl3 08.07.2018 / 13:40

4 respostas

2

Existem muitas maneiras de fazer isso no powershell

1..3 | ForEach {MD ".\data\rs$_"}

ou

'RS1','RS2','RS3' | % {New-Item -Name ".\data\$_" -ItemType 'Directory'}

ou

for ($i=1;$i -le 3;$i++){MD ".\data\rs$i"}

ou

MD .\data
Pushd .\data
$Folder = @('RS1','RS2','RS3')
Md $Folder

Em que md é um alias para New-Item e % , ForEach são aliases para ForEach-Object

    
por 08.07.2018 / 15:48
2

Você poderia usar foreach no PowerShell para fazer isso

ForEach ($Dir in ("Dir1", "Dir2", "Dir3", "Dir4"))
    {
        New-Item -ItemType Directory -Path [PATH]\$Dir
    } 

Leia mais sobre ForEach in PowerShell

    
por 08.07.2018 / 15:49
1

Antes de mais nada, não use a captura de tela para ver as coisas que você pode copiar e colar facilmente como texto.

O comando na sua captura de tela é este:

mkdir \data\rs1 \data\rs2 \data\rs3

E isso funcionará bem em um script também, desde que você esteja na unidade correta, neste exemplo C: .

O comando mkdir /data/rs1 /data/rs2 /data/rs3 não é a mesma coisa, porque, como você pode ver, os parâmetros de caminho usam / como separador de caminho, o que não funcionará no Windows.

Colocar aspas duplas em torno da lista de caminhos também não ajuda. Dessa forma, a expressão com aspas duplas é tratada como um único caminho, em vez de 3 caminhos.

Em resumo, assim como mkdir \data\rs1 \data\rs2 \data\rs3 funciona no seu exemplo de comando, funciona exatamente da mesma maneira em um script em lote.

    
por 08.07.2018 / 14:14
1

mkdir pode criar vários diretórios de uma só vez, portanto, não é necessário usar foreach . você só tem que spearate eles por vírgulas:

Aqui eu criei 3 pastas (Hello, Hello2, Hello3) em um diretório

PS C:\install> mkdir Hello,Hello2,Hello3


    Verzeichnis: C:\install


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       09.07.2018     10:39                Hello
d-----       09.07.2018     10:39                Hello2
d-----       09.07.2018     10:39                Hello3

Aqui, criei 3 pastas em subpastas separadas em um diretório:

PS C:\install> mkdir .\xy3\Hello, .\yz3\Hello2, .\tr3\Hello3


    Verzeichnis: C:\install\xy3


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       09.07.2018     10:42                Hello


    Verzeichnis: C:\install\yz3


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       09.07.2018     10:42                Hello2


    Verzeichnis: C:\install\tr3


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       09.07.2018     10:42                Hello3
    
por 09.07.2018 / 10:43