7-zip -xr!*.bat 正在创建一个带有批处理文件名的空档案

7-zip -xr!*.bat 正在创建一个带有批处理文件名的空档案

我正在尝试从 7-zip 批处理中排除文件。

语法是:

for %%A in (*) do "C:\Program Files\7-Zip\7z.exe" a -tzip -xr!*.docx "%%A.zip" "%%A" -xr!*.bat

该命令正在创建文件夹中所有文件的 zip 文件(包括文件*.bat),但*.bat.zip文件是空的。

有什么方法可以阻止空文件的生成?

答案1

首先,我假设括号中有一个*.*,并且您为每个输入文件生成一个 zip。如果不是这种情况,您可能需要更改以下内容。我.bat.zip使用以下命令获得了空文件:

for %%A in (*.*) do "C:\Program Files\7-Zip\7z.exe" a -tzip -xr!.docx "%%A.zip" "%%A" -xr!*.bat

7-zip 在添加文件之前会创建存档,因此即使没有文件要添加到存档中,您也会得到一个空存档。要解决此问题,请在将文件添加到存档之前检查该文件:

@echo off
for %%A in (*.*) do call :doit "%%A"
goto end

:doit
if "%~x1"==".bat" goto :eof
if "%~x1"==".docx" goto :eof
if "%~x1"==".zip" goto :eof
"C:\Program Files\7-Zip\7z.exe" a -tzip %1.zip %1 
goto :eof

:end

(在 Windows 7 上测试)。

循环for现在调用“doit”子程序,该子程序从标签开始:doit并在任何goto :eof命令上退出。循环goto end结束后,for只需跳过子程序即可干净退出。

这些if语句排除了您不想存档的文件。 %1是要测试的文件名,%~x1是其扩展名。如果扩展名不合适,则goto :eof返回循环for并且永远不会调用 7-zip。

7-zip 命令不再有标志,因为当您输入 7z 命令行时,您就知道文件名是好的。由于已经在语句中引用了,-x因此没有引号。%1call

希望这可以帮助!

相关内容