我需要在位置创建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
我在这里想念的是什么?
答案 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-$_”})