我需要用Windows的
*.bat
脚本将两个二进制文件合并,该如何实现?*.bat
脚本将两个二进制文件合并,该如何实现?Windows的type
命令与UNIX的cat
命令类似。
示例1:
type file1 file2 > file3
等价于:
cat file1 file2 > file3
例子2:
type *.vcf > all_in_one.vcf
type file1 file2 > file3 2>NUL
。 - Mike T你可以像这样使用copy /b
:
copy /b file1+file2 destfile
无耻地宣传PowerShell(因为我认为其学习曲线很陡峭,所以在任何机会上教授一些东西都可以帮助)
Get-Content file1,file2
请注意,type
是 Get-Content 的别名,因此如果您喜欢它,可以这样写:
type file1,file2
type file1 file2 > dest
在 cmd 中尝试,每个文件仅需几秒钟就完成了。 - stib\n
可能会被替换为 \r\n
。 - jfs-Encoding UTF8
没有改变任何东西。 - John Dvorak-AsByteStream
来告诉它不要将其拆分成行。在旧版 PowerShell 中,你需要使用 -Raw
或 -Encoding Byte
。 - phuclvcopy file1+file2 appendedfile
因此,我正在寻找一种类似的解决方案,具有保留行尾字符的功能,但发现没有办法,所以我做了我最擅长的事情,并制作了自己的实用程序。这是一个适用于Windows的本地cat可执行文件 - https://mega.nz/#!6AVgwQhL!qJ1sxx-tLtpBkPIUx__iQDGKAIfmb21GHLFerhNoaWk
Usage: cat file1 file2 file3 file4 -o output.txt
-o | Specifies the next arg is the output, we must use this rather than ">>" to preserve the line endings
echo new text >>existingFile.txt
1>2# : ^
'''
@echo off
python "%~nx0" " %~nx1" "%~nx2" "%~nx3"
exit /b
rem ^
'''
import sys
import os
sys.argv = [argv.strip() for argv in sys.argv]
if len(sys.argv) != 4:
sys.exit(1)
_, file_one, file_two, out_file = sys.argv
for file_name in [file_one, file_two]:
if not os.path.isfile(file_name):
print "Can't find: {0}".format(file_name)
sys.exit(1)
if os.path.isfile(out_file):
print "Output file exists and will be overwritten"
with open(out_file, "wb") as out:
with open(file_one, "rb") as f1:
out.write(f1.read())
with open(file_two, "rb") as f2:
out.write(f2.read())
join.bat file_one.bin file_two.bin out_file.bin
感谢这个答案的启发。
Windows类型的命令存在问题,例如在512字节边界上使用Unicode字符。尝试使用Cygwin的cat命令。
type
只能替换部分cat
的功能。 - jfscat
不仅仅是将文件连接在一起;它还可以将标准输入复制到标准输出(当没有参数调用时)。有关如何在 Windows 上实现此操作,请参见此问题:https://stackoverflow.com/q/52330841 - Simon Kissane