我需要在Windows上用*.bat脚本连接两个二进制文件。

我怎样才能做到呢?


当前回答

如果你必须使用批处理脚本并安装python,这里有一个多语言的批处理和python回答:

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,则用法如下:

join.bat file_one.bin file_two.bin out_file.bin

谢谢你的灵感。

其他回答

你可以像这样使用copy /b:

copy /b file1+file2 destfile

如果你必须使用批处理脚本并安装python,这里有一个多语言的批处理和python回答:

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,则用法如下:

join.bat file_one.bin file_two.bin out_file.bin

谢谢你的灵感。

如果只是想将文本附加到现有文件的末尾,可以使用>>管道。例:

echo new text >>existingFile.txt

只需对多个源文件和一个目标文件使用dos复制命令。

copy file1+file2 appendedfile

二进制文件可能需要/B选项

Windows type命令的工作原理类似于UNIX cat。

示例1:

type file1 file2 > file3

等价于:

cat file1 file2 > file3

示例2:

type  *.vcf > all_in_one.vcf  

这个命令将所有的vcard合并为一个。