我正在创建一个从文件夹创建zip文件的批处理,我想检查压缩文件是否已经成功创建。它记录了创建了哪个zip文件,但是当它出错时,它应该转到一个标签上并停止操作。这是不起作用的,否则命令将被回显而不执行。
SETLOCAL EnableExtensions EnableDelayedExpansion
for /d %%d in (*) do (
"7z.exe" a -r -tzip "%%d.zip" ".\%%d\" & IF %ERRORLEVEL% EQU 0 (echo Archive "%%d.zip" created succesfully >> "Archive-log %date%.txt") ELSE (set fault="%%d.zip" goto createzip))
exit /b
:createzip
echo Failed creating archive %fault% >> "Error-log %date%.txt"
exit /b发布于 2017-10-07 09:48:50
以下是重写和扩展的批处理代码。如果无法将子文件夹压缩到ZIP存档,批处理文件不会立即停止。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem Get current date in region dependent format with . as delimiter.
set "FileDate=%DATE:/=.%"
set "ErrorCount=0"
set "FolderCount=0"
rem Compress each non hidden subfolder in current folder into a ZIP file.
for /D %%I in (*) do (
set /A FolderCount+=1
"7z.exe" a -r -tzip "%%I.zip" ".\%%I\"
if errorlevel 1 (
echo Failed creating archive: "%%I.zip">>"Error-log %FileDate%.txt"
set /A ErrorCount+=1
) else (
echo Archive "%%I.zip" created succesfully.>>"Archive-log %FileDate%.txt"
)
)
rem Exit batch processing if no subfolder was found in current folder?
if %FolderCount% == 0 endlocal & exit /B
set "ErrorPluralS=s"
if %ErrorCount% == 1 set "ErrorPluralS="
set "FolderPluralS=s"
if %FolderCount% == 1 set "FolderPluralS="
echo Processed %FolderCount% folder%FolderPluralS% with %ErrorCount% error%ErrorPluralS%.>>"Archive-log %FileDate%.txt"
endlocalif errorlevel 1在不使用延迟扩展的情况下工作意味着:
如果前面的命令或可执行文件的退出代码是大于或等于1,那么.
微软支持文章测试批处理文件中的特定错误级别解释了这一点,并在批处理文件和命令行中从Windows到Windows 10工作。
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在那里执行以下命令,并非常仔细地读取为每个命令显示的所有帮助页。
echo /?endlocal /?for /?if /?rem /?set /?setlocal /?还请阅读以下内容的答复:
发布于 2017-10-05 22:50:23
我认为这是因为您的ELSE包含两个没有分开的语句,因此goto最终成为set命令的一部分。为了解决这个问题,为了提高可读性,我认为您应该稍微修改一下格式:
for /d %%d in (*) do (
"7z.exe" a -r -tzip "%%d.zip" ".\%%d\"
IF %ERRORLEVEL% EQU 0 (
echo Archive "%%d.zip" created succesfully >> "Archive-log %date%.txt"
) ELSE (
set fault="%%d.zip"
goto createzip
)
)https://stackoverflow.com/questions/46587699
复制相似问题