2014-10-04 133 views
0

我有以下批处理脚本批处理脚本只有第一个if语句被执行

@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 if语句首先被列出并且BUILD SUCCESS在文件中,它将按预期退出。但是,如果BUILD SUCCESS位于文件中,并且BUILD SUCCESS if语句是第二位(如代码示例中所示),它从不捕获它并在文件末尾暂停。我的语法突出显示是用圆括号做奇怪的事情,所以我认为这是我如何分组的东西,但我无法弄清楚。

回答

1

删除exit命令中的括号。

+0

韦尔普,这很简单。 – gfree 2014-10-04 15:30:18

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)