2017-05-31 59 views
1

這就產生預期新目錄的路徑使用的驅動器盤符:到PowerShell的新建項目命令

new-item "c:\newdir" -itemtype directory 

這也適用於:

$arr = "one", "two" 
$arr | new-item -name {$_} -itemtype directory 

在兩個新文件夾所得:c:\onec:\two(假設當前目錄是c :)。

這會失敗,並顯示錯誤「給定路徑的格式不受支持」。

$arr = "c:\one", "c:\two" 
$arr | new-item -name {$_} -itemtype directory 

我該如何使路徑中的驅動器號進行這項工作?

+0

請注意未來的讀者:'{$ _}'_looks_就像它應該是'$ {_}',但它是 - 並且是一個_script-block_參數,它可以有效地綁定每個通過的輸入對象流水線是指定的參數。 A - 部分過時 - 這種方法的解釋可以在這裏找到(https://blogs.msdn.microsoft.com/powershell/2006/06/23/flexible-pipelining-with-scriptblock-parameters/);目前,該方法僅適用於 ,其參數設計爲採用流水線輸入_in principle_。 – mklement0

回答

2

您需要將-name和-path結合起來才能正確工作。

New-Item -Name "Name" -itemType directory -path "C:\" 

您可以創建哈希表項的數組,而不是將路徑作爲一個條目,將名稱作爲另一個條目。或者,如果路徑始終是相同的,只需將它作爲另一個變量傳遞即可。

+1

這個答案並沒有解決OP的問題_asp_。據推測,它被接受是因爲它使OP意識到你不能將_paths_傳遞給​​'-Name',而是必須傳遞目錄_names_,並將其與'_Path'設置爲_shared父路徑_,以便在其中創建目錄指定_names_。 – mklement0

3

TL;博士

  • 優選地,直接傳遞路徑陣列到(暗示)-Path參數:

    $arr = 'c:\one', 'c:\two' 
    # Positional use of $arr implies -Path 
    New-Item $arr -ItemType Directory 
    
  • 可替換地,經由管路和腳本塊參數值:

    $arr = 'c:\one', 'c:\two' 
    $arr | New-Item -Path { $_ } -ItemType Directory 
    
  • 隨着目錄和他們共享父路徑指定分別

    $arr = 'one', 'two' 
    $arr | New-Item -Name { $_ } -ItemType Directory -Path C:\ 
    

如果不指定參數名稱,New-Item結合第一位置參數-Path參數。

因此,

new-item "c:\newdir" -itemtype directory 

是一樣的:

new-item -Path "c:\newdir" -itemtype directory 

New-Item -?會告訴你,-Path接受一個字符串數組

New-Item [-Path] <String[]> ... 

因此,你不甚至不需要管道d可以只通過您的的路徑數組直接

New-Item 'c:\one', 'c:\two' -ItemType Directory 

幾個New-Item的參數接受管道輸入,以及通過值(輸入對象接受輸入唯一的一個原樣)是-Value,這不是 幫助這裏。

剩餘的管道綁定參數需要通過屬性名稱匹配參數名稱來綁定

要確定哪些參數接受管道輸入,請運行Get-Help -full New-Item並搜索字符串Accept pipeline input? True的實例。此方法適用於所有cmdlet。

因此,爲了結合參數-Path,輸入對象必須具有.Path屬性:

$arr = [pscustomobject] @{ Path = 'c:\one' }, [pscustomobject] @{ Path = 'c:\two' } 
$arr | New-Item -ItemType Directory 

然而,考慮到任何管道結合參數可以採取腳本塊如那些參數值對每一輸入對象評價,這可以簡化爲:

$arr = 'c:\one', 'c:\two' 
$arr | New-Item -Path { $_ } -ItemType Directory 

部門自動化c變量$_反映了手頭的管線對象,在這種情況下,依次輸入字符串

A-部分過時 - 這種方法的解釋可以發現here;目前,該方法僅使用 的參數設計爲原則上採用流水線輸入的參數

在與-Name { $_ }-Path C:\頂部的命令 - 從共享父路徑指定名稱分別 - 工程類似。


至於你試過

-Name接受目錄只;只有-Path接受路徑

試圖輸入結合路徑-Name導致錯誤消息:

The given path's format is not supported. 

因爲包含字符,如:\不能是一個目錄/文件名的一部分輸入路徑

0

當我們這樣做:

new-item "c:\newdir" -itemtype directory 

「C:\ NEWDIR」將被自動解析到新建項目的路徑參數,因爲它是在位置1。這使得它的工作

當我們這樣做這個:

$arr | new-item -name {$_} -itemtype directory 

$ arr的每個值都通過值傳遞給流水線,這將解析爲New-Item的Value參數。 由於它有一個Value和一個Directory ItemType,它會引發一個適合。

New-Item的幫助文件顯示Path是一個字符串[]。這意味着你可以這樣做:

$arr = "c:\one", "c:\two" 
new-item -Path $Arr -itemtype directory 

它會爲$ Arr中的所有值創建目錄。