Answers:
使用以下命令:
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
1..9 | % $_{ mv ch$_*.* ch$_ }
^ D
git add
并查看返回的内容-请记住,$_
在foreach中只有最后一个管道项的每个单独的数组条目(这意味着commit
示例中的步骤不会获得原始数字,因此ch
再次加法可能是错误的)。另外,在您的示例中,提交将在所有添加完成后仅(?)运行,这意味着第一个提交将获得所有内容...或者,您可以;
在单个foreach步骤中使用多个语句(用分隔)。
您不需要多次调用mkdir,因为它New-Item
可以采用一系列路径。例如:
mkdir $(1..9 | %{"ch$_"})
@DavidPostill在回答中解释了大多数概念。这还利用了字符串插值的优势,而不是执行显式串联。另外,使用%
简写代替ForEach-Object
,但是含义相同。
不幸的是,似乎没有像bash一样简单的方法将字符串插值到字符串数组中。
md(0..9|%{"ch$_"})
md
是的标准别名mkdir
,它是PowerShell函数。%
正如Bob提到的那样,是的标准别名ForEach-Object
。双引号字符串可插入变量,因此"ch$_"
等效于'ch' + $_
。您可以通过在其上运行Get-Command
(gcm
)查找别名。
1..9 | %{"ch$_"} | %{git add "$_"; git commit -m "$_"}
或1..9 | %{$name = "ch$_"; git add "$name"; git commit -m "$name"}
。这些评论现在已经有点长了,因此,如果您还有其他问题-请以问题的形式提出,或者直接聊天。
我会使用for循环版本,因为它很容易记住并且可以应用于许多情况。甚至可以用于多个命令。
对于此bash命令的等效项:
为{1..9}中的i;做
mkdir ch $ i
完成
...在PowerShell中使用:
for($i=1;
$i -le 10;
$i++)
{md ch$i}
Missing opening '(' after keyword 'for'.
此命令:foreach ($i in 1..9) {md ch$i}
使我编号为“ ch” apter目录,但我不理解您的“ for”。 ..; do ... done”循环。
for($i=1; $i -le 10; $i++){md ch$i}
谢谢mamun,但是我还不是“再次犯错……”;)(我也不知道C ++,但是我想我有点理解“ $ i-le”(如果小于或等于?), “ $ i ++”(〜“ i + = 1”?)的意思是并且正在执行命令...
1..9 | % $_{ md -name $("ch" + $_) }
?