多个目录:Powershell 相当于“mkdir dir{1..9}”?

Mmm*_*Hmm 11 linux powershell command-line-arguments mkdir

使用 PowerShells md(或 mkdir、New-Item...)等价于 'nix 命令mkdir ch{1..9}即创建多个目录的语法是什么

~/parent_dir/  
ch1/  
ch2/  
ch3/  
ch4/  
ch5/  
ch6/  
ch7/  
ch8/  
ch9/  
Run Code Online (Sandbox Code Playgroud)

我查看了手册页和 get-help 示例,但我不知道 PowerShell 执行如此简单的事情的语法。谢谢你。

Bob*_*Bob 23

您不需要多次调用 mkdir,因为New-Item可以采用一组路径。例如:

mkdir $(1..9 | %{"ch$_"})
Run Code Online (Sandbox Code Playgroud)

@DavidPostill 在他的回答中解释了大部分概念。这也利用了字符串插值而不是执行显式连接。此外,使用%简写代替ForEach-Object,但具有相同的含义。

不幸的是,似乎没有一种简单的方法可以像在 bash 中那样将字符串插入到字符串数组中。

  • 最大高尔夫版本:`md(0..9|%{"ch$_"})` (3认同)
  • @DavidPostill 您的解释比我详细得多。这可能更像是您回答的附录:P (2认同)
  • @DavidPostill 请不要删除它-您的解释非常有用 (2认同)
  • @DavidPostill `md` 是 `mkdir` 的标准别名,它是一个 PowerShell 函数。正如 Bob 所提到的,`%` 是 `ForEach-Object` 的标准别名。双引号字符串插入变量,所以 `"ch$_"` 等价于 `'ch' + $_`。您可以通过在其上运行 `Get-Command` (`gcm`) 来查找别名。 (2认同)

Dav*_*ill 17

使用 PowerShell 创建多个目录的语法是什么

使用以下命令:

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

这个怎么运作:

  • 0..9范围操作者 ..产生的数字0,1,... 9的序列
  • 数字通过管道 |传输到下一个命令
  • foreach 循环(依次通过每个数字)
  • { ... }是一个脚本块
  • New-Item -ItemType directory -Name $("ch" + $_) 创建目录
  • $_是一个自动变量,表示管道中的当前对象(数字)

例子:

> 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
Run Code Online (Sandbox Code Playgroud)

  • 没有什么比输入以下内容更冗长了:`1..9 | % $_{ md -name $("ch" + $_) }` ? (3认同)