2017-03-21 6 views
2

私はバッチファイルでfilewatcher作成するバッチ・ファイル内のファイルを移動し、解凍しますfolderA内のファイルのためのFilewatcherが実行され、

ウォッチ(.zipファイル)→(同じ名前で)folderBのためにそれらを解凍→バッチファイルをトリガ→多くの受信.zipファイルに対して同じ操作を行います。

私はあなたのコードを持つ2つの主要な問題を参照してくださいいくつかのより多くの助け

: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の中でこれに関連する質問をチェックしますが。 1つは、forループ内のラベルを使用できないことです。これを回避するには、:BATCH1:BATCH2のラベルをループ外に移動してサブルーチンに入れます(もちろん、%%Gはループ外には存在しませんので、パラメータとして新しいサブルーチンに渡す必要があります)。

私が見ている2番目の問題は、あなたのカッコが正しい場所にないことです(そして、あなたのインデントが乱れているかもしれませんが、それはちょうどコピーエラーでした)。 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をサブルーチンに渡すと(これは正常に実行されますが、 "\"は抜けてしまいます)、エラーが発生します。 "findstr/M" KO "%UNZIP_FOLDER%\%1 \ Logs \%1.log"は 'd:¥LocalData¥¥Desktop¥unzipになります" testfile \ Logs "testfile.log" – PrimeSuspect

+0

欠けている部分はダブル\\を追加し、\\を%1に追加して、期待通りに機能しました!! – PrimeSuspect

関連する問題