2014-10-04 2 views
0

У меня есть следующий сценарий серииBatch Script только Первый Если Заявление исполн

@echo off 
cd %USERPROFILE%\desktop 

IF EXIST output.txt (
    FOR /F "tokens=*" %%G IN (output.txt) DO (
    echo %%G 
    IF "%%G" == "BUILD FAILED" (
     echo failed 
     pause 
     exit (1) 
    ) 
    IF "%%G" == "BUILD SUCCESS" (
     echo success 
     pause 
     exit (0) 
    ) 
) 
) 
pause 

Он считывает из текстового файла, который имеет одну строку, либо BUILD SUCCESS или BUILD FAILED. То, что я определил, заключается в том, что если оператор BUILD SUCCESS if указан первым, а BUILD SUCCESS находится в файле, он выходит, как ожидалось. Но, если BUILD SUCCESS находится в файле, а BUILD SUCCESS, если оператор второй (как показано в примере кода), он никогда не захватывает его и не делает его в паузу в конце файла. Моя подсветка синтаксиса делает странные вещи с круглыми скобками, поэтому я предполагаю, что это то, с чем я группирую вещи, но я не могу понять это.

ответ

1

Удалите скобки в командах exit.

+0

Welp, что было легко. – gfree

1

Этот сценарий отлично работает для меня. Я надеюсь, что это дает вам идеи, которые вы должны решить вопрос:

@ECHO off 
ECHO Start of script 
IF NOT DEFINED T set T=Undefined Title 
TITLE %T% 
::cd %USERPROFILE%\desktop 
IF NOT EXIST output.txt (
    ECHO Generating sample file... 
    ECHO BUILD SUCCESS>output.txt 
    ECHO BUILD FAILED>>output.txt 
) 

IF EXIST output.txt (
    FOR /F "tokens=*" %%G IN (output.txt) DO (
    echo %%G 
    IF "%%G" == "BUILD FAILED" (
     echo failed 
     GOTO :ERR 
    ) 
    IF "%%G" == "BUILD SUCCESS" (
     echo success 
    ) 
) 
) 
GOTO :END 
:ERR 
ECHO Failed. Will close in 10 seconds... 
FOR /l %%a in (10,-1,1) do (TITLE %T% -- closing in %%as&ping -n 2 -w 1000 127.1>NUL) 
EXIT 1 
:END 
ECHO End of script. Will close in 10 seconds... 
FOR /l %%a in (10,-1,1) do (TITLE %T% -- closing in %%as&ping -n 2 -w 1000 127.1>NUL) 
EXIT 0 
1

Вот альтернативный сценарий:

@echo off 
find "BUILD SUCCESS" < "%USERPROFILE%\desktop\output.txt" >nul && (echo success & pause & exit 0) 
find "BUILD FAILED" < "%USERPROFILE%\desktop\output.txt" >nul && (echo failed & pause & exit 1)