2017-05-19 112 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}

它將在一次創建的所有目錄。 爲了獲得一些目錄以及一些文件,聲明兩個不同的數組。第一個是目錄,第二個是文件。其餘的腳本將是相同的,除了:項目類型將文件,而不是目錄