2017-03-21 2 views
2

내가 배치 파일에 filewatcher 만들려는 배치 파일에 파일을 이동, 압축을 해제합니다 : 폴 데라에있는 파일에 대한Filewatcher 실행하고

시계 (.ZIP) → (같은 이름) ​​folderB에 압축을 풀고 → 배치 파일을 실행 → 더 많은 들어오는 .zip 파일을 위해 동일하게 수행하십시오.

나는 내가 당신의 코드에 두 가지 주요 문제를보고 좀 더 도움

:STARTPROCESS 
CD /D %ROOT_DIR% 
FOR /F "tokens=1-2 delims=." %%G in ('dir *.zip /b') do 
(
REM unzip file 
%SEVENZIP_PATH%\7z.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%\7z.exe a "%UNZIP_FOLDER%\%G%" -o%ZIP_FOLDER% -y >>%LOG% 
) 
) 

timeout 60 
goto STARTPROCESS 
cmd /k 

답변

3

필요에 StackOverflow이에 관련된 질문을 확인하지만. 첫 번째는 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%\7z.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%\7z.exe a "%UNZIP_FOLDER%\%1" -o%ZIP_FOLDER% -y >>%LOG% 
    ) 
) 
+0

그것은했다.! 하지만 또 다른 문제가 발견되었습니다 : 내가 %% G를 메인 루프에서 서브 루틴으로 넘길 때 (OK를 지나치지만 "\"가 빠지기 때문에) 에러가납니다. "findstr/M"KO "% UNZIP_FOLDER % \ % 1 \ Logs \ % 1.log"가 'd : \ LocalData \\ Desktop \ unzip'이됩니다. testfile \ Logs "testfile.log" – PrimeSuspect

+0

누락 된 부분은 두 번 추가 \\, % 1에 \\를 추가했는데 예상대로 작동했습니다 !! – PrimeSuspect