我正在运行这个批处理脚本,它给出了标题中描述的错误
set /p ActiveMQpath=
ECHO.
if exist %ActiveMQpath%+"\InstallService.bat" (
ECHO Installer found, starting with ActiveMQ installation. Please wait...
cd %ActiveMQpath%
CALL InstallService.bat
ECHO ActiveMQ Service has been installed
ECHO Attempting to start service... Please wait
ECHO.
timeout /t 5 /nobreak >nul
ECHO.
Set ServiceName=ActiveMQ
goto StartService
if %IsServiceRunning% =="TRUE" (
start iexplore http://localhost:8161/
) else ( ECHO Service not running...
PAUSE)
) else (
ECHO File not found, please try again
goto ACTIVEMQ_WRONGPATH)
我不知道我错过了什么。语法表明这应该是正确的
if exist "filename" (
!do job!
) else (
!do other job!
)
我的代码甚至没有进入第一个 IF 条件
答案1
您的批处理文件中有两个问题。
第一个是你有嵌套的 IF。批处理文件不支持嵌套的 IF 语句。你必须编写一个 If 比较,并根据其结果使用 goto 在代码中跳转。这样,你就可以拥有嵌套的 IF。
其次,我发现了一个可能的拼写错误,即使没有嵌套的 if,它也会造成第一个 if 不起作用。其中有一个 +,它将检查是否存在带有 + 的路径。如果不存在,它将执行 else。
但是考虑到嵌套的 if 是一个严重错误(批处理无法识别它),所以它不会在脚本运行之前执行而是停止。
您希望您的代码看起来像这样:
set /p ActiveMQpath=
ECHO.
if exist "%ActiveMQpath%\InstallService.bat" goto InstallerExists
goto InstallerNotFound
:InstallerExists
ECHO Installer found, starting with ActiveMQ installation. Please wait...
cd %ActiveMQpath%
CALL InstallService.bat
ECHO ActiveMQ Service has been installed
ECHO Attempting to start service... Please wait
ECHO.
timeout /t 5 /nobreak >nul
ECHO.
Set ServiceName=ActiveMQ
goto StartService
if "%IsServiceRunning%"=="TRUE" (
start iexplore http://localhost:8161/
) else (
ECHO Service not running...
PAUSE
)
goto end
:InstallerNotFound
ECHO File not found, please try again
goto ACTIVEMQ_WRONGPATH)
:StartService
::your code here, missing from snippet...
goto end
:ACTIVEMQ_WRONGPATH
::your code here, missing from snippet...
goto end
:end