2013-11-04 16 views
0

我需要在文件夾C:\projects中創建子目錄。我正在使用get-content讀取輸入文件 - 將文件轉換爲字符串,然後將字符串拆分爲換行符。但是,當我將字符串傳遞給New-Item時,它會顯示「路徑中的非法字符」。我甚至使用trim()來裁剪空白或換行符,但我得到相同的錯誤。Powershell - 讀取輸入文件並添加目錄

$inputTxt = Get-Content "c:\input.txt" -Raw 
[string[]]$input = $inputTxt.split("`n") 
$combinePath = "c:\projects"+ "\" + $input[$i] 

New-Item $combinePath -type directory 

可替換地,我只是直接讀取輸入文件到一個數組使用get-內容但沒有-raw參數,其將在新行,但是,當僅存在1文件中輸入的話,就出現問題根據字符而不是換行符拆分字符串。

+0

'$ i'是什麼?你有沒有嘗試在'New-Item'之前打印'$ combinePath'來查看究竟傳遞了什麼? – tnw

+0

我已將字符串存儲在$ input數組中。它在for循環中,$ i索引到數組中(我沒有粘貼代碼)。是的,我打印它,看起來很好。這就是爲什麼我認爲可能在路徑中有一些轉義字符,所以我使用trim(),並沒有工作 – Naz

+0

請在失敗時添加'$ combinePath'的一些示例 – tnw

回答

0

您不需要使用-RawGet-Content的默認行爲是給你一個行數組。你只需要過濾空行和以非法路徑字符例如爲:

$inputTxt = Get-Content C:\input.txt | Where {$_.Trim().Length -gt 0} 
$inputTxt -replace '[<>|"]','' | Foreach {New-Item (Join-Path c:\projects $_) -type directory} 

這不是無效字符的完整列表,但應該讓你在正確的方向前進。

+0

我試過了,但如果輸入的txt有隻有一個輸入如133,而不是創建c:\ projects \ 133,它會創建c:\ projects \ 1,c:\ projects \ 3,c:\ projects \ 3。我想知道它爲什麼做到這一點 – Naz

+0

我不能重複。它在V3上適用於我。就你而言,它的作用就像枚舉字符串中的字符,而不是將字符串視爲單個對象。 –

相關問題