我正在尝试从 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
因此没有引号。%1
call
希望这可以帮助!