如何使用CMD按顺序合并Windows备份中的多个分片文件?
问题原因
你当前的写法是在循环内重复执行单文件复制操作,copy /b命令在仅传入单个源文件、单个目标文件时,默认会直接覆盖目标文件的已有内容,因此每次循环都会把之前合并好的内容清空,仅保留当前分片的内容,最终得到的自然只有最后一个分片的数据。
解决方法
你可以选择以下任意一种方式实现按顺序追加合并:
方式一:提前拼接所有分片路径,单次执行copy命令完成合并
先执行命令拼接所有分片路径:for /f "tokens=* delims=" %A in (filenamesinorder.txt) do set "merge_list=%merge_list%+%A"再执行合并命令,自动去掉路径开头多余的加号:
copy /b %merge_list:~1% "c:\pstcombiner\combined.pst"该方式执行效率更高,适合分片数量不多的场景。
方式二:循环内逐次追加内容到目标文件
先删除可能存在的旧合并文件避免干扰:del /f /q "c:\pstcombiner\combined.pst" 2>nul再执行逐次追加的循环命令:
for /F "tokens=*" %A in (filenamesinorder.txt) do if exist "c:\pstcombiner\combined.pst" (copy /b "c:\pstcombiner\combined.pst"+"%A" "c:\pstcombiner\combined.pst") else (copy /b "%A" "c:\pstcombiner\combined.pst")该方式无需提前拼接长路径,适合分片数量极多的场景。
注意事项
- 如果将上述命令写入
.bat批处理文件运行,需要把所有变量标识%A替换为%%A,否则会出现变量识别错误。 - 所有涉及的文件路径如果包含空格,必须用双引号包裹,避免命令解析失败。
内容的提问来源于stack exchange,提问作者Addioioi
相关产品推荐
相关产品推荐

