似乎每当我运行我的批处理文件时,一切都会运行,它将进入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
)
非常感谢所有帮助。
答案 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 *