以递归方式检查zip存档的完整性如何通过在Windows下通过批处理文件在文件扩展名后附加字符串来重命名文件夹中的错误文件? 我试过这个脚本,它没有给我任何错误,但也没有重命名坏文件。
FOR /R \backup %%A IN (*.zip) DO (
7z t "%%A" | FIND "Everything is Ok" || ((REN "%%A" "%%A.bad") & (ECHO.%%A BAD >> error.log))
)
我有PHP脚本编程的经验,并且通常理解这个代码块(管道和逻辑OR运算符的含义)。但是,我完全没有批量 - 脚本编写的经验,并从this source采用了该脚本。根据我的理解,支票收到" OK"或者在日志文件中添加一个条目并重命名该文件。添加了日志条目,但未应用重命名。我不明白为什么。你能告诉我出了什么问题以及如何按预期工作吗?
答案 0 :(得分:1)
您可以将此批处理代码用于您的任务。
@echo off
rem Test all ZIP files recursive from directory backup in root of
rem current drive and append .bad to those ZIP files not validate.
rem The names of those files are additionally written into an
rem error.log text file in current working directory.
for /R "\backup" %%A in (*.zip) do (
7z.exe t "%%A">nul
if errorlevel 1 (
ren "%%A" "%%~nxA.bad"
echo %%A BAD>>error.log
)
)
在7-zip的帮助下,有一个关于退出代码的页面。正如可以在此帮助页面上阅读的那样,任何大于0的值都意味着出错了。
因此,if errorlevel 1
可用于检查ZIP文件上的测试是否为正(退出代码为0)或失败(值大于或等于1)。
在输入if /?
或help if
后查看命令提示符窗口中的帮助输出,了解有关 errorlevel 的详细信息。 if errorlevel 1
表示:如果前一个命令的退出代码大于或等于1,那么......
进一步命令 ren 只需要没有path作为第二个参数的新文件名,否则它不会将使用或不使用path指定的文件重命名为第一个参数。这就是为什么%%~nxA
必须用作命令 ren 的第二个参数才能引用要重命名的文件的名称和扩展名的原因。输入for /?
或help for
后,输入 输出的帮助包含文件名的修饰符字母列表。