2016-10-25 100 views
0

我寫了一個小腳本,通過基於輸入文件生成完整命令,幫助我更高效地將文件夾從一個地方移動到另一個地方。向輸入添加文本,僅將第二部分添加到最後一行

代碼:

Get-Content inputfile.txt | 
    ForEach-Object { 
     "robocopy D:\Home\" + $_ + " H:\Home-E\" + $_ 
    } | Set-Content outputfile.txt 

現在這工作正常,但最後一部分只被添加到最後一行。

輸出文件看起來是這樣的:

robocopy D:\Home\ewja 
robocopy D:\Home\ewst 
robocopy D:\Home\ewwi 
robocopy D:\Home\ezga H:\Home-E\ezga

有誰知道爲什麼第二部分被從第一線切斷?

+0

也許這個工程:'cat inputfile.txt | %{「robocopy D:\ Home \ $ _ H:\ Home-E \ $ _」}> outfile.txt' –

+0

我得到了相同的結果,但它讓我意識到輸入文件中的空格可能是問題。我會檢查出來並回到這個線程。 –

+0

是的,我的輸入文件中的每一行後面的空格都弄亂了。感謝讓我意識到! :) –

回答

0

問題是一個純粹的視覺之一:

輸入文件的每一行只是這麼長時間後的尾部空間 - 每行,但最後是對空間填充至119個字符 - 什麼第二次參考$_擴展到(部分以H:\Home-E\...開頭)只是滾動出
只有最後線是空間填充,因此對於最後一個命令整個輸出線是在控制檯中可見。

注意,產生的命令仍然有工作,但是,因爲傳遞給命令的參數之間的空格數量不母校。

爲了從源頭上解決問題:

Get-Content inputfile.txt | 
    ForEach-Object { 
     $_ = $_ -replace '\s+$' # trim trailing whitespace from input line 
     "robocopy D:\Home\" + $_ + " H:\Home-E\" + $_ 
    } | Set-Content outputfile.txt 

注意,在雙引號字符串該字符串插值可以使命令字符串的建設略爲簡單"robocopy D:\Home\$_ H:\Home-E\$_"

然而,這兩種方法都普遍強勁,因爲它可以打破構建的robocopy命令與文件名有嵌入空間,所以你必須執行輸入文件名的引用/轉義。
具體的方法取決於shell將執行包含構造命令的文件。

0

我的輸入文件中的每一行後面的空格都弄亂了所有內容。刪除了空格,一切按預期工作。

+0

輸入行末尾的空格不能解釋您的問題中描述的行爲。嘗試''abc','def'| %{「robocopy D:\ Home \」+ $ _ +「H:\ Home-E \」+ $ _}'。知道真正的原因會很有趣。 – mklement0

+0

好吧,明天我再次訪問輸入文件並讓你知道時會嘗試它,但奇怪的是,如果不是這種情況,我會得到與metix'相同的結果相同的結果。 我也可以上傳輸入文件,如果你想看看它。 –

+0

metix'命令與你的功能相當,所以我不驚訝它給出了相同的結果。如果你可以給我一個上傳的輸入文件的鏈接,我很高興看看它。順便說一下,什麼PowerShell版本? – mklement0

相關問題