2012-01-05 181 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 
相关问题