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


11

什么是创建多个目录与PowerShells的md等同于“nix的命令的语法(或MKDIR,新建项目...) mkdir ch{1..9},即

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

我已经查看了手册页和获取帮助的示例,但是我不知道PowerShell可以执行这种简单操作的语法。谢谢。

Answers:


16

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

使用以下命令:

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

怎么运行的:

  • 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

3
没有什么更简洁比输入以下命令:1..9 | % $_{ md -name $("ch" + $_) }
肯尼迪先生

1
我想是这样。但是我不是PowerShell专家。
DavidPostill

1
看起来
不错

1
a-HA-知道了::1..9 | % $_{ mv ch$_*.* ch$_ }^ D
Kennedy先生

1
@肯尼迪先生夫妇的事情。您应该尝试运行the git add并查看返回的内容-请记住,$_在foreach中只有最后一个管道项的每个单独的数组条目(这意味着commit示例中的步骤不会获得原始数字,因此ch再次加法可能是错误的)。另外,在您的示例中,提交将在所有添加完成后仅(?)运行,这意味着第一个提交将获得所有内容...或者,您可以;在单个foreach步骤中使用多个语句(用分隔)。
鲍勃

22

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

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

@DavidPostill在回答中解释了大多数概念。这还利用了字符串插值的优势,而不是执行显式串联。另外,使用%简写代替ForEach-Object,但是含义相同。

不幸的是,似乎没有像bash一样简单的方法将字符串插值到字符串数组中。


2
@DavidPostill您已经比我解释得详细得多。这可能是您答案的补充:P
鲍勃(Bob)

2
@DavidPostill,请不要删除它-您的解释非常有用
肯尼迪先生

3
最高高尔夫版本:md(0..9|%{"ch$_"})
本N

2
@DavidPostill md是的标准别名mkdir,它是PowerShell函数。%正如Bob提到的那样,是的标准别名ForEach-Object。双引号字符串可插入变量,因此"ch$_"等效于'ch' + $_。您可以通过在其上运行Get-Commandgcm)查找别名。
本N

1
@肯尼迪先生类似:1..9 | %{"ch$_"} | %{git add "$_"; git commit -m "$_"}1..9 | %{$name = "ch$_"; git add "$name"; git commit -m "$name"}。这些评论现在已经有点长了,因此,如果您还有其他问题-请以问题的形式提出,或者直接聊天。
鲍勃

1

我会使用for循环版本,因为它很容易记住并且可以应用于许多情况。甚至可以用于多个命令。

对于此bash命令的等效项:

为{1..9}中的i;做
mkdir ch $ i
完成

...在PowerShell中使用:

for($i=1;
$i -le 10;
$i++)
{md ch$i}

妈妈,您能澄清一下吗-从PowerShell命令行运行您的代码时出现错误,或者作为ps1脚本:Missing opening '(' after keyword 'for'.此命令:foreach ($i in 1..9) {md ch$i}使我编号为“ ch” apter目录,但我不理解您的“ for”。 ..; do ... done”循环。
肯尼迪先生2016年

我在这里使用的for循环用于bash shell(/ bin / sh)。就像我习惯了这个shell一样,我总是将shell更改为bash。对于PS,你必须使用不同的语法for循环(请参阅所附链接ss64.com/ps/for.html
奥斯曼马蒙

1
PowerShell:for($i=1; $i -le 10; $i++){md ch$i}谢谢mamun,但是我还不是“再次犯错……”;)(我也不知道C ++,但是我想我有点理解“ $ i-le”(如果小于或等于?), “ $ i ++”(〜“ i + = 1”?)的意思是并且正在执行命令...
肯尼迪先生

1
是的,论点可以理解为(从1初始化i;只要i小于或等于1;将i增加1){迭代地填充内容}
Osman Mamun

1

在当前目录下创建多个目录:

mkdir ('abc','def','jkl') 

上面是以下内容的简写。请注意,字符串数组前面包括了符号,并使用了命名参数:

mkdir -Path @('abc','def','jkl')

如果您想一路走,完整的本机命令将是:

New-Item -Path @('abc','def','jkl') -ItemType Directory

使用PowerShell命令行时,我使用的是简短版本。

在编写脚本时,尤其是为其他脚本(可能是PowerShell的新脚本)编写脚本时,我倾向于编写完整的本机命令。

选择最适合您的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.