我试图在Unix中复制“cat”命令的功能。
我想避免解决方案,我明确地将两个文件都读入变量,将变量连接在一起,然后写出连接变量。
答案 0 :(得分:123)
您只需使用cat example1.txt, example2.txt | sc examples.txt
即可。您也可以使用此样式连接两个以上的文件。另外,如果文件名称相似,您可以使用:
cat example*.txt | sc allexamples.txt
cat
是Get-Content
的别名,sc
是Set-Content
的别名。
注1 :小心后一种方法 - 如果您尝试输出到examples.txt
(或与模式匹配的类似),PowerShell将进入无限循环! (我刚试过这个)。
注意2 :输出到>
的文件不会保留字符编码!这就是为什么建议使用Set-Content
(sc
)。
答案 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 )