使用Powershell创建多个文件夹

时间:2017-05-19 21:30:00

标签: powershell scripting

我需要在位置创建3个名为AAA,BBB,CCC的文件夹:c \ temp \ test

我尝试了以下代码:

$local = "C:\Temp\Test"
$Users = $local+"\AAA\",$local+"\BBB\",$local+"\CCC\"
New-Item -Item Type directory $Users

它给了我错误 New-Item:找不到接受参数

的位置参数

我也试过

$local = "C:\Temp\Test"
$Users = $local+"\AAA\",$local+"\BBB\",$local+"\CCC\"
md $Users

我在这里想念的是什么?

4 个答案:

答案 0 :(得分:3)

BenH's helpful answer提供了有效的解决方案。

为什么你的命令不起作用

您的问题是运算符优先级之一:

$local+"\AAA\",$local+"\BBB\",$local+ "\CCC\"

被解释为:

$local + ("\AAA\",$local) + ("\BBB\",$local) +"\CCC\"

导致单个字符串而不是所需的数组,因为LHS - $local字符串

也许令人惊讶的是,,(数组构造运算符)的优先级高于+ - 请参阅Get-Help about_Operator_Precedence

因此,使用(...)作为优先级会使您的命令正常工作

$Users = ($local+"\AAA\"), ($local+"\BBB\"), ($local+"\CCC\")

使用可扩展(插值)字符串(在"..."内部),如BenH的答案,更简洁,但仍然:

  • 首先需要定义辅助变量 $local

  • 需要在每个可扩展(插值)字符串($local)中引用"..."

DRY替代是(%ForEach-Object的别名):

$Users = 'AAA', 'BBB', 'CCC' | % { "C:\Temp\$_\" }

请注意,使用管道来实现这一点有点,但在大多数情况下这不重要。

使用foreach语句有点冗长,但表现更好:

$Users = foreach($name in 'AAA', 'BBB', 'CCC') { "C:\Temp\$name\" }

答案 1 :(得分:1)

对于$users的定义,要么将变量放在引号内,要么在子表达式中进行字符串连接,例如: $()。此外,ItemType参数中还有一个额外的空格:

$local = "C:\Temp\Test"
$Users = "$local\AAA\","$local\BBB\","$local\CCC\"
New-Item -ItemType directory $Users

答案 2 :(得分:0)

您可以将所有目录路径值放在一个数组中,并在一次运行中创建新目录。

setParams()

它将立即创建所有目录。 要获取某些目录以及某些文件,请声明两个不同的数组。第一个用于目录,第二个用于文件。其余的脚本将是相同的,除了:Item-Type将是文件而不是目录

答案 3 :(得分:0)

为什么不直接使用 Mkdir $(001..10 | %{“testfolders-$_”})