2017-03-21 1 views
2

ich einen Penguin Computing in Batch-Datei erstellen möchten:Penguin Computing entpacken, ausführen und Dateien im Batch-Datei verschieben

Uhr für Datei in ordnerA (.zip) → entpacken Sie sie (mit dem gleichen Namen) FolderB → und eine Batch-Datei auslösen → das gleiche für mehr eingehende .zip-Dateien tun.

Ich habe ähnliche Fragen zu diesem in Stackoverflow, aber ich brauche mehr Hilfe

: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 

Antwort

3

Ich sehe zwei Hauptprobleme mit Ihrem Code. Die erste Möglichkeit besteht darin, dass Sie keine Labels innerhalb von for Loops verwenden können. Um dies zu umgehen, können Sie die Beschriftungen :BATCH1 und :BATCH2 außerhalb der Schleife und in ein Unterprogramm verschieben (%%G wird außerhalb der Schleife natürlich nicht existieren, so dass Sie es auch als Parameter an das neue Unterprogramm übergeben müssen).

Das zweite Problem, das ich sehe, ist, dass Ihre Klammern nicht an der richtigen Stelle sind (und möglicherweise, dass Ihre Einrückung durcheinander ist, aber das könnte nur ein Kopierfehler gewesen sein). Die ( einer for Schleife muss in der gleichen Zeile wie do und eine andere muss als ) else ( geschrieben werden. Sie vermissen auch die ursprünglichen ( in Ihren beiden if Aussagen. Im Wesentlichen sperrt Batch Sie in K & R-Stil.

Letztlich wird der Code so etwas wie folgt aussehen:

: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

es funktionierte.! habe aber ein anderes Problem gefunden: Wenn ich %% G von der Hauptschleife an die Unterroutine übergebe (es übergibt OK, aber vermisst das "\") und damit bekomme ich einen Fehler. wie dies 'findstr/M" KO "% UNZIP_FOLDER% \% 1 \ Logs \% 1.log' wird 'd: \ LocalData \ \ Desktop \ entpacken" testfile \ Logs "testfile.log' – PrimeSuspect

+0

der fehlende Teil war zu add double \\, ich fügte \\ dem% 1 hinzu und es funktionierte wie erwartet. !! – PrimeSuspect

Verwandte Themen