Filewatcher 在批处理文件中解压缩、运行 和移动文件
Filewatcher to unzip, run and move files in batch-file
我想在批处理文件中创建一个文件观察器:
查看文件夹 A (.zip) 中的文件 → 将它们解压缩到文件夹 B(同名)→ 并触发批处理文件 → 对更多传入的 .zip 文件执行相同操作。
我在 Whosebug 中查看了与此相关的问题,但我需要更多帮助
:STARTPROCESS
CD /D %ROOT_DIR%
FOR /F "tokens=1-2 delims=." %%G in ('dir *.zip /b') do
(
REM unzip file
%SEVENZIP_PATH%z.exe x "%ROOT_DIR%" -o%UNZIP_FOLDER% -y >> %LOG%
echo %%G -- unzip complete
REM run batch1
:BATCH1
REM check ERROR from batch1 log --> i have a problem from here nothing below works
findstr /M "ERROR" %UNZIP_FOLDER%\%%G\Logs\*.log
If %ERRORLEVEL%==0 echo Error Found
move /Y "%UNZIP_FOLDER%\%%G" "%Folder1% >> %LOG%
goto STARTPROCESS
else
(
echo %%G Batch1 OK
goto BATCH2
)
REM run batch2
:BATCH2
REM check ERROR from batch2 log
findstr /M "Total Count : 0" %UNZIP_FOLDER%\%%G\Data\*_Output.log
If %ERRORLEVEL%==0 echo %%G Batch2 OK
goto STARTPROCESS
else
(
echo ERROR
move /Y "%UNZIP_FOLDER%\%%G\fileA.xml" "%UNZIP_FOLDER%\bin >> %LOG%
%SEVENZIP_PATH%z.exe a "%UNZIP_FOLDER%\%G%" -o%ZIP_FOLDER% -y >>%LOG%
)
)
timeout 60
goto STARTPROCESS
cmd /k
我发现您的代码存在两个主要问题。首先是您不能在 for
循环中使用标签。为了解决这个问题,您可以将 :BATCH1
和 :BATCH2
标签移到循环外并移到子例程中(当然, %%G
不会存在于循环外,因此您需要通过它也作为参数传递给新的子程序。
我看到的第二个问题是你的括号不在正确的位置(并且可能你的缩进搞砸了,但这可能只是一个复制错误)。 for
循环的(
需要和do
在同一行,else需要写成) else (
。您还缺少两个 if
语句中的初始 (
。基本上,批处理将您锁定在 K&R 风格中。
最终,您的代码将如下所示:
:STARTPROCESS
CD /D %ROOT_DIR%
FOR /F "tokens=1-2 delims=." %%G in ('dir *.zip /b') do (
REM unzip file
%SEVENZIP_PATH%z.exe x "%ROOT_DIR%" -o%UNZIP_FOLDER% -y >> %LOG%
echo %%G -- unzip complete
REM run batch1
call :BATCH1 "%%~G"
)
timeout 60
goto STARTPROCESS
cmd /k
:BATCH1
REM check ERROR from batch1 log
findstr /M "ERROR" %UNZIP_FOLDER%\%1\Logs\*.log
If %ERRORLEVEL%==0 (
echo Error Found
move /Y "%UNZIP_FOLDER%\%%G" "%Folder1% >> %LOG%
exit /b
) else (
echo %%G Batch1 OK
REM check ERROR from batch2 log
findstr /M "Total Count : 0" %UNZIP_FOLDER%\%1\Data\*_Output.log
If %ERRORLEVEL%==0 (
echo %%G Batch2 OK
goto STARTPROCESS
) else (
echo ERROR
move /Y "%UNZIP_FOLDER%\%%G\fileA.xml" "%UNZIP_FOLDER%\bin >> %LOG%
%SEVENZIP_PATH%z.exe a "%UNZIP_FOLDER%\%1" -o%ZIP_FOLDER% -y >>%LOG%
)
)
我想在批处理文件中创建一个文件观察器:
查看文件夹 A (.zip) 中的文件 → 将它们解压缩到文件夹 B(同名)→ 并触发批处理文件 → 对更多传入的 .zip 文件执行相同操作。
我在 Whosebug 中查看了与此相关的问题,但我需要更多帮助
:STARTPROCESS
CD /D %ROOT_DIR%
FOR /F "tokens=1-2 delims=." %%G in ('dir *.zip /b') do
(
REM unzip file
%SEVENZIP_PATH%z.exe x "%ROOT_DIR%" -o%UNZIP_FOLDER% -y >> %LOG%
echo %%G -- unzip complete
REM run batch1
:BATCH1
REM check ERROR from batch1 log --> i have a problem from here nothing below works
findstr /M "ERROR" %UNZIP_FOLDER%\%%G\Logs\*.log
If %ERRORLEVEL%==0 echo Error Found
move /Y "%UNZIP_FOLDER%\%%G" "%Folder1% >> %LOG%
goto STARTPROCESS
else
(
echo %%G Batch1 OK
goto BATCH2
)
REM run batch2
:BATCH2
REM check ERROR from batch2 log
findstr /M "Total Count : 0" %UNZIP_FOLDER%\%%G\Data\*_Output.log
If %ERRORLEVEL%==0 echo %%G Batch2 OK
goto STARTPROCESS
else
(
echo ERROR
move /Y "%UNZIP_FOLDER%\%%G\fileA.xml" "%UNZIP_FOLDER%\bin >> %LOG%
%SEVENZIP_PATH%z.exe a "%UNZIP_FOLDER%\%G%" -o%ZIP_FOLDER% -y >>%LOG%
)
)
timeout 60
goto STARTPROCESS
cmd /k
我发现您的代码存在两个主要问题。首先是您不能在 for
循环中使用标签。为了解决这个问题,您可以将 :BATCH1
和 :BATCH2
标签移到循环外并移到子例程中(当然, %%G
不会存在于循环外,因此您需要通过它也作为参数传递给新的子程序。
我看到的第二个问题是你的括号不在正确的位置(并且可能你的缩进搞砸了,但这可能只是一个复制错误)。 for
循环的(
需要和do
在同一行,else需要写成) else (
。您还缺少两个 if
语句中的初始 (
。基本上,批处理将您锁定在 K&R 风格中。
最终,您的代码将如下所示:
:STARTPROCESS
CD /D %ROOT_DIR%
FOR /F "tokens=1-2 delims=." %%G in ('dir *.zip /b') do (
REM unzip file
%SEVENZIP_PATH%z.exe x "%ROOT_DIR%" -o%UNZIP_FOLDER% -y >> %LOG%
echo %%G -- unzip complete
REM run batch1
call :BATCH1 "%%~G"
)
timeout 60
goto STARTPROCESS
cmd /k
:BATCH1
REM check ERROR from batch1 log
findstr /M "ERROR" %UNZIP_FOLDER%\%1\Logs\*.log
If %ERRORLEVEL%==0 (
echo Error Found
move /Y "%UNZIP_FOLDER%\%%G" "%Folder1% >> %LOG%
exit /b
) else (
echo %%G Batch1 OK
REM check ERROR from batch2 log
findstr /M "Total Count : 0" %UNZIP_FOLDER%\%1\Data\*_Output.log
If %ERRORLEVEL%==0 (
echo %%G Batch2 OK
goto STARTPROCESS
) else (
echo ERROR
move /Y "%UNZIP_FOLDER%\%%G\fileA.xml" "%UNZIP_FOLDER%\bin >> %LOG%
%SEVENZIP_PATH%z.exe a "%UNZIP_FOLDER%\%1" -o%ZIP_FOLDER% -y >>%LOG%
)
)