如何让7-Zip将压缩结果直接输出至指定文件夹而非批处理目录?
解决7-Zip批处理直接在目标目录生成独立压缩包的问题
我明白你的需求——不想先在当前目录生成zip再移动,想直接把每个文件夹的独立压缩包放到C:\Output里对吧?之前的写法出错是因为没搞对7-Zipa命令的参数顺序,咱们一步步来修正:
问题出在哪?
你之前修改的命令:
for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "C:\Output\" "%%X.zip" "%%X\"
这里的核心错误是搞反了压缩包路径和参数的顺序。7-Zip的a(添加到压缩包)命令格式是:7z a <完整压缩包路径> <要压缩的文件/文件夹>。你把C:\Output\当成了压缩包名,后面的%%X.zip反而被当成了要压缩的内容,结果自然是生成一个包含所有文件夹的大压缩包。
另外你提到的-o参数,那是用来指定解压时的输出目录的,压缩场景下根本用不上,所以之前尝试它肯定没效果~
正确的批处理命令
直接把每个压缩包的完整路径(目标目录+原文件夹名+.zip)放在a命令后面就行,同时建议先检查目标目录是否存在,避免因为路径不存在报错:
@echo off :: 先检查目标目录是否存在,不存在则创建 if not exist "C:\Output" mkdir "C:\Output" :: 遍历当前目录下的所有文件夹,直接在目标目录生成独立压缩包 for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "C:\Output\%%X.zip" "%%X\" echo 所有文件夹压缩完成! pause
关键细节解释
if not exist "C:\Output" mkdir "C:\Output":提前创建目标文件夹,避免7-Zip因找不到输出路径而运行失败"C:\Output\%%X.zip":这是实现需求的核心——把每个文件夹%%X对应的压缩包直接指定到C:\Output目录下,文件名和原文件夹名保持一致"%%X\":末尾的反斜杠是告诉7-Zip压缩文件夹内部的所有内容(如果去掉反斜杠,压缩包根目录会多一层原文件夹,和你最初的命令行为保持一致)
这样运行后,C:\Output里就会生成每个文件夹对应的独立zip包,完全省去了移动文件的步骤,既省时间又省临时空间~
内容的提问来源于stack exchange,提问作者futuremoves
相关产品推荐
相关产品推荐

