以recursion方式检查zip归档文件的完整性如何在Windows下通过batch file在文件扩展名之后附加string来重命名文件夹中的错误文件? 我试过这个脚本,它给了我没有错误,但不重命名坏文件。
FOR /R \backup %%A IN (*.zip) DO ( 7z t "%%A" | FIND "Everything is Ok" || ((REN "%%A" "%%A.bad") & (ECHO.%%A BAD >> error.log)) )
我有PHP脚本的经验,并且通常了解这个代码块(pipe道和逻辑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 /?
后,在命令提示符窗口中查看帮助输出if /?
或help if
有关错误级别的详细信息。 if errorlevel 1
意味着:如果上一个命令的退出代码大于或等于1,则…
进一步的命令ren仅仅需要没有路径的新的文件名作为第二参数,否则它不会将具有或不具有路径的文件重命名为第一参数。 这就是为什么必须使用%%~nxA
作为命令ren的第二个参数来引用文件的名称和扩展名才能重命名的原因。 输入for /?
后输出命令的帮助 或help for
包含一个文件名修饰符的列表。