如何在PowerShell中连接两个文本文件?

我试图在Unix中复制“cat”命令的function。

我想避免解决scheme,我明确地将两个文件读入variables,连接variables,然后写出连接的variables。

你可以简单地使用cat example1.txt, example2.txt | sc examples.txt cat example1.txt, example2.txt | sc examples.txt 。 你也可以用这种风格连接两个以上的文件。 另外,如果文件命名相似,则可以使用:

 cat example*.txt | sc allexamples.txt 

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

注意1 :小心后一种方法 – 如果你尝试输出到examples.txt (或类似的匹配模式),PowerShell将进入一个无限循环! (我刚刚testing过)。

注2 :使用>输出到文件不保留字符编码! 这就是为什么使用Set-Contentsc )的原因。

不要使用cat> ; 它弄乱了字符编码。 使用:

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

花了几个小时才发现这一点。

您可以使用Add-Content cmdlet。 也许这比其他解决scheme快一点,因为我不检索第一个文件的内容。

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

cmd ,你可以这样做:

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

在PowerShell中,这将是:

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

虽然PowerShell的方式是使用gc ,但是上面的速度会非常快,特别是对于大文件。 它也可以在非ASCII文件上使用/B开关。

我用了:

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

这附加罚款。 我添加了ASCII编码来清除记事本++显示的nul字符,而不显示编码。

你可以做一些事情:

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

其中>是“out-file”的别名,而>>是“out-file -append”的别名。

由于大多数其他答复经常得到格式错误(由于pipe道),最安全的事情如下:

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

我知道你想避免将$ SomeAdditionalFile的内容读入一个variables,但为了保存例如你的新行格式,我不认为有没有正确的方法来做到这一点。

解决方法是逐行循环遍历$ SomeAdditionalFile,并将它们传递到$ YourMasterFile中。 然而,这是过度的资源密集型。

在命令提示符下连接文件就是了

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

Powershell将types命令转换为Get-Content,这意味着在powershell中使用type命令时会出现错误,因为Get-Content命令需要用逗号分隔这些文件。 在PowerShell中相同的命令将是

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

如果您需要按特定参数(例如date时间)sorting文件:

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

我认为“powershell的方式”可能是:

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