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

时间:2012-01-05 21:16:08

标签: powershell powershell-v2.0

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

我想避免解决方案,我明确地将两个文件都读入变量,将变量连接在一起,然后写出连接变量。

11 个答案:

答案 0 :(得分:123)

您只需使用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)。

答案 1 :(得分:55)

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

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

我花了好几个小时才找到它。

答案 2 :(得分:13)

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文件上使用。

答案 3 :(得分:10)

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

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

答案 4 :(得分:4)

要在命令提示符下连接文件,它将是

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

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

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

答案 5 :(得分:3)

我用过:

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

这附加罚款。我添加了ASCII编码来删除没有显式编码的Notepad ++显示的空字符。

答案 6 :(得分:3)

如果您需要按特定参数(例如日期时间)订购文件:

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

答案 7 :(得分:2)

要保持编码和行尾:

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

注意:AFAIR,旧的Powershell(<3?<4?)不支持其参数

答案 8 :(得分:1)

您可以执行以下操作:

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

其中>是“out-file”的别名,&gt;&gt;是“out-file -append”的别名。

答案 9 :(得分:1)

由于大多数其他回复通常会导致格式错误(由于管道),最安全的做法如下:

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

我知道你想避免将$ SomeAdditionalFile的内容读入变量,但为了保存例如你的新行格式,我认为没有正确的方法可以不用。

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

答案 10 :(得分:0)

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

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