如何递归检查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运算符的含义)。但是,我绝对没有批处理脚本的经验,因此从此来源开始采用了脚本。据我了解,该支票会收到“确定”或将一个条目添加到日志文件并重命名该文件。日志条目已添加,但是未应用重命名。我不明白为什么。您能告诉我发生了什么问题以及如何才能按预期工作吗?
您可以将此批代码用于您的任务。
@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
查看有关错误级别的详细信息后,请在命令提示符窗口中查看帮助输出。if errorlevel 1
表示:如果前一个命令的退出代码大于或等于1,则...
进一步的命令ren只需要不带路径作为第二个参数的新文件名,否则它不会重命名带有或不带路径作为第一个参数的指定文件。这就是为什么%%~nxA
必须将其用作命令ren的第二个参数以仅引用要重命名的文件的名称和扩展名的原因。命令的帮助对输出输入后for /?
或help for
包含文件名的修饰符字母的列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句