Múltiplos diretórios: Powershell equivalente a “mkdir dir {1..9}”?

11

Qual é a sintaxe para criar vários diretórios com o PowerShells md (ou mkdir, New-Item ...) equivalente ao comando 'nix mkdir ch{1..9} ou seja,

~/parent_dir/  
ch1/  
ch2/  
ch3/  
ch4/  
ch5/  
ch6/  
ch7/  
ch8/  
ch9/  

Procurei nas man pages e get-help por exemplos, mas não conheço a sintaxe do PowerShell para fazer uma coisa tão simples. Obrigado.

    
por Mr. Kennedy 25.09.2016 / 15:43

3 respostas

16

Qual é a sintaxe para criar vários diretórios com o PowerShell

Use o seguinte comando:

0..9 | foreach $_{ New-Item -ItemType directory -Name $("ch" + $_) }

Como funciona:

Exemplo:

> 0..9 | foreach $_{ New-Item -ItemType directory -Name $("ch" + $_) }


    Directory: F:\test


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       25/09/2016     14:57                ch0
d-----       25/09/2016     14:57                ch1
d-----       25/09/2016     14:57                ch2
d-----       25/09/2016     14:57                ch3
d-----       25/09/2016     14:57                ch4
d-----       25/09/2016     14:57                ch5
d-----       25/09/2016     14:57                ch6
d-----       25/09/2016     14:57                ch7
d-----       25/09/2016     14:57                ch8
d-----       25/09/2016     14:57                ch9
    
por 25.09.2016 / 15:58
22

Você não precisa invocar mkdir várias vezes, porque New-Item pode pegar uma matriz de caminhos. Por exemplo:

mkdir $(1..9 | %{"ch$_"})

@DavidPostill explicou a maioria dos conceitos em sua resposta . Isso também tira proveito da interpolação de string em vez de executar uma concatenação explícita. Além disso, a abreviação % é usada em vez de ForEach-Object , mas tem o mesmo significado.

Infelizmente, parece não haver uma maneira fácil de interpolar uma string em uma matriz de strings como no bash.

    
por 25.09.2016 / 17:15
1

Eu usaria para a versão de loop, pois é fácil de lembrar e pode ser aplicado a muitas situações. Até mesmo pode ser usado para comando múltiplo.

Para um equivalente deste comando bash:

for i in {1..9}; do
mkdir ch$i
done

... no uso do PowerShell:

for($i=1;
$i -le 10;
$i++)
{md ch$i}
    
por 26.09.2016 / 17:16