2017-05-19 82 views
1

多个文件夹,我需要创建一个名为AAA,BBB,CCC在位置3个文件夹:C \ TEMP \测试创建使用PowerShell

我想下面的代码:

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

这是给我的错误 新建项目:一个定位参数无法找到接受参数

我也试过

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

我在这里错过了什么?

+0

是文件夹嵌套或你想让他们在同一个位置'$本地'? – pandemic

+0

我想让他们在同一地点 –

回答

0

为您$users定义要么把变量引号内还是做字符串连接的子表达式如$()。另外你曾在ItemType参数的额外空间:

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

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

为什么你的命令没有工作

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

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

被解读为:

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

导致单个字符串而不是desi红色阵列,因为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\" } 
0

你可以把所有的目录路径值在数组中,并在单次运行中创建新目录。

@('D:/NewFolder','D:/NewFolder1/NewFolder_app','D:/NewFolder1/NewFolder_app_pool','C:/NewTestFolder101') | foreach {New-Item -Path $_ -ItemType Directory -Force}

它将在一次创建的所有目录。 为了获得一些目录以及一些文件,声明两个不同的数组。第一个是目录,第二个是文件。其余的脚本将是相同的,除了:项目类型将文件,而不是目录