2013-01-17 65 views
2

好吧,假設我在目錄樹中有一堆文本文件,所有文件名都是相同的,我想將它們連接成1個文件。用管道替換foreach

我得到它與一個foreach的工作,但我想知道是否有更好的方式來使用pipleline。

有沒有更好的方法來做到這一點?

代碼:

dir -filter users.txt -recurse | foreach { get-content $_.FullName | add-content .\All.txt } 

這工作,但我覺得我應該已經能夠做到這一點,而不在foreach。

回答

6

如果你讀了Get-Content幫助下,你會看到-Path接受String []數組,這意味着你可以嘗試管道從GET-ChildItem的輸出直接

[22:24:57] PS-ADMIN> get-help Get-Content 

NAME 
    Get-Content 

SYNOPSIS 
    Gets the contents of a file. 

SYNTAX 
    Get-Content [-Path] <String[]> [-Credential <PSCredential>] ...... 

那麼試試這個:

Get-ChildItem -Filter users.txt -Recurse | Get-Content | Set-Content .\all.txt 

編輯:其實:研究更長時間後,我發現,這是-LiteralPath是要帶從FileInfo的對象的PSPath屬性並將其用作路徑。仍然,相同的邏輯:-)

+0

謝謝!我可以發佈我發佈之前曾嘗試過的文件,並獲得一個剛剛填寫了「users.txt」的文件。我第一次做錯了事,因爲當我再次嘗試時,它效果很好。 – JMarsch