2012-01-05 59 views

回答

80

您可以簡單地使用cat example1.txt, example2.txt | sc examples.txt。你也可以用這種風格連接兩個以上的文件。另外,如果該文件的名稱相似,你可以使用:

cat example*.txt | sc allexamples.txt 

catGet-Content的別名,scSet-Content的別名。

注1:小心用後一種方法 - 如果你嘗試輸出到examples.txt(或類似的模式匹配),PowerShell的將進入一個無限循環! (我剛測試過)。

注2:輸出到>的文件不保留字符編碼!這就是爲什麼推薦使用Set-Contentsc)的原因。

+0

以防萬一有人想文件重複的進行_Get -ChildItems | Foreach-Object_構造可能需要使用Add-Content而不是Set-Content。否則,目標文件會在每次迭代中被覆蓋。 – Jonas 2018-02-06 14:53:11

1

你可以這樣做:

get-content input_file1 > output_file 
get-content input_file2 >> output_file 

哪裏>是「出文件」的別名,和>>,用於「文件-append」的別名。

12

cmd,你可以這樣做:

copy one.txt+two.txt+three.txt four.txt 

在PowerShell中,這將是:

cmd /c copy one.txt+two.txt+three.txt four.txt 

雖然PowerShell的方法是使用gc,上面會非常快,尤其是對於大文件。也可以使用/B開關在非ASCII文件上使用它。

+2

對我來說,cat命令比cmd/c命令運行多個數量級(運行真的很快);感謝您指出選項! – Rob 2014-08-13 12:23:28

10

您可以使用Add-Content cmdlet。也許它比其他解決方案快一點,因爲我不檢索第一個文件的內容。

gc .\file2.txt| Add-Content -Path .\file1.txt 
44

請勿使用cat ... >;它會擾亂字符編碼。使用:

Get-Content files.* | Set-Content newfile.file 

花了我幾個小時才發現這一點。

+0

'cat'是'Get-Content'的別名。 – n0rd 2015-09-05 22:31:08

+3

@ n0rd我認爲這更像是一個「用管道代替」的東西。 – ksoo 2016-01-30 20:09:17

1

由於大部分其他的答覆往往得到的格式錯誤(由於管道),以最安全的做法如下:

add-content $YourMasterFile -value (get-content $SomeAdditionalFile) 

我知道你想避免讀取$ SomeAdditionalFile的內容到一個變量,但爲了保存例如你的新行格式我不認爲有沒有正確的方法來做到這一點。

解決方法是逐行循環遍歷$ SomeAdditionalFile並將它們傳遞到$ YourMasterFile中。然而這是過度資源密集型的。

3

我使用:

Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log 
-Encoding ASCII -Append 

此所附細。我添加了ASCII編碼來刪除記事本++顯示的nul字符,而不顯示編碼。

0

我覺得 「PowerShell的方式」 可能是:

set-content destination.log -value (get-content c:\FileToAppend_*.log) 
2

要Concat的命令文件中提示這將是

type file1.txt file2.txt file3.txt > files.txt

PowerShell的轉換類型命令獲取內容,這意味着在powershell中使用type命令時會出現錯誤,因爲Get-Content命令需要用逗號分隔這些文件。在PowerShell中的相同的命令將

Get-Content file1.txt,file2.txt,file3.txt | Set-Content files.txt

1

如果您需要按特定參數的文件(例如:日期時間):

gci *.log | sort LastWriteTime | % {$(Get-Content $_)} | Set-Content result.log