批处理文件跳过If语句

时间:2013-03-23 03:44:28

标签: windows batch-file

似乎每当我运行我的批处理文件时,一切都会运行,它将进入checkfiles,但它不会运行if语句。什么都没有返回,它只是跳过代码的最后一部分。

:file_check
if exist "%psychedelia%\nhc.exe" (goto file_exists) else (timeout /t 1 /nobreak > output)
goto file_check

:file_exists
copy /Y "%~dp0version.txt" "%psychedelia%"

:checkfiles
echo in checkfiles
if exist "%psychedelia%\wa.exe" if exist "%psychedelia%\readme.txt" if exist "%psychedelia%\HD.BLB" if exist "%psychedelia%\smackw32.dll" if exist "%psychedelia%\setup95.exe" if exist "%psychedelia%\WAVistaWin7.exe" (
    echo MSGBOX "Thank you for installing the Neverhood. You may now go to your desktop and click on the Orpheus shortcut to play!" > %temp%\TEMPxmessage.vbs
    call %temp%\TEMPxmessage.vbs
    del %temp%\TEMPxmessage.vbs /f /q
    rename "%psychedelia%\nhc.exe" wa.exe
    timeout /t 1 /nobreak > output
    taskkill.exe /F /IM setup95.exe /T
) else ( 
    echo nonexistent
    pause
    timeout /t 1 /nobreak > output
    goto checkfiles
)

非常感谢所有帮助。

2 个答案:

答案 0 :(得分:3)

只有该行的最后一个if exist有括号,因此else仅适用于最后一个。如果任何第一个评估为false,它将跳过整个事情。

答案 1 :(得分:1)

尝试:

...
echo in checkfiles
for %%f in (wa.exe 
            readme.txt 
            HD.BLB 
            smackw32.dll 
            setup95.exe 
            WAVistaWin7.exe
           ) do if not exist "%psychedelia%\%%f" (
    echo %%f nonexistent
    pause
    timeout /t 1 /nobreak > output
    goto checkfiles
   )

:: all required files found

echo MSGBOX "Thank you for installing the Neverhood. You may now go to your desktop and click on the Orpheus shortcut to play!" > %temp%\TEMPxmessage.vbs
call %temp%\TEMPxmessage.vbs
del %temp%\TEMPxmessage.vbs /f /q
rename "%psychedelia%\nhc.exe" wa.exe
timeout /t 1 /nobreak > output
taskkill.exe /F /IM setup95.exe /T

维护起来可能更容易。

事实上,你甚至可以写

set requiredfiles=wa.exe readme.txt HD.BLB smackw32.dll setup95.exe WAVistaWin7.exe
for %%f in (%requiredfiles%) do if not exist "%psychedelia%\%%f" (
...

这会更容易。

但是请接受Nate Hekman的回答 - 这只是一个BTW *