我正在尝试单独压缩一些文件类型未知的文件。我在批处理脚本中使用以下代码来执行此操作:
@ECHO OFF
FOR %%A IN (bestbuy*nat*component.cpi*) DO "C:\Program Files\7-Zip\7z.exe" a -mx9 -m0=lzma2:d256m "%%~nA.7z" "%%A"
仅当文件具有扩展名时,代码才会单独压缩文件。不幸的是,我拥有的文件没有任何扩展名。在代码中,我尝试通过执行模式匹配来压缩文件,文件被压缩为一个文件(我不想要,我希望每个文件单独压缩)。
为什么当文件具有扩展名时(例如,如果我在文件末尾添加 .txt),此代码会创建单独的 zip 文件,而当没有扩展名时,代码会创建一个压缩文件。
有人能帮我用代码压缩未知文件类型的文件吗,以便每个文件单独压缩
非常感谢您的帮助。
答案1
7-Zip 不使用系统通配符解析器。7-Zip 不遵循 *.* 表示任何文件的古老规则。7-Zip 将 *.* 视为与任何具有扩展名的文件的名称匹配。要处理所有文件,您必须使用 * 通配符。
此时,您提供通配符参数的批处理文件中尚未涉及 7z.exe。在 Windows 系统上,命令行应为:
FOR %%A IN (bestbuy*nat*component*) DO "C:\Program Files\7-Zip\7z.exe" a –mx9 –m0=lzma:d=256m "%%~nA.7z" "%%A"
我更改了–m0
参数,因为它与我运行的版本中的规格不匹配。经过这些轻微的修改后,它对我来说运行良好。
更新:
以下是我的测试环境的输出:
C:\Temp> 7zip.bat C:\Temp> FOR %A IN (7*test*) DO "C:\Program Files\7-Zip\7z.exe" a -mx9 -m0=lzma:d=256m %~nA.7z %A C:\Temp> “C:\Program Files\7-Zip\7z.exe” a -mx9 -m0=lzma:d=256m 7ziptest_1.7z 7ziptest_1.txt 7-Zip [64] 4.65 版权所有 (c) 1999-2009 Igor Pavlov 2009-02-03 扫描 创建档案 7ziptest_1.7z 压缩 7ziptest_1.txt 一切都好 C:\Temp> “C:\Program Files\7-Zip\7z.exe” a -mx9 -m0=lzma:d=256m 7ziptest_2.7z 7ziptest_2.txt 7-Zip [64] 4.65 版权所有 (c) 1999-2009 Igor Pavlov 2009-02-03 扫描 创建档案 7ziptest_2.7z 压缩 7ziptest_2.txt 一切都好 C:\Temp> “C:\Program Files\7-Zip\7z.exe” a -mx9 -m0=lzma:d=256m 7ziptest_3.7z 7ziptest_3 7-Zip [64] 4.65 版权所有 (c) 1999-2009 Igor Pavlov 2009-02-03 扫描 创建档案 7ziptest_3.7z 压缩 7ziptest_3 一切都好