我尝试编写一个小批量文件,它会根据参数以不同的方式作出反应。 不幸的是,比较两个string的“if”语句似乎不像预期的那样工作。 使用的代码是:
@echo off if "%1"=="" goto Usage echo "Parameter: %1" IF /I "%1"=="START" { echo "Why the hell is %1 == Start?" SET Parameter=start goto :execute } else if /I "%1"=="STOP" { SET Parameter=stop goto :execute } echo "Parameter %1% invalid" :Usage echo "Synapsis:" echo " SwitchServices Start|Stop" goto :EOF :execute SET servicename=Dnscache SET filename=Dnscache.exe CALL :%parameter%_Service goto :EOF :stop_Service echo ... stopping service ... net stop %servicename% if (ERRORLEVEL GTR 0) call :kill_Service sc config %servicename% start= disabled Service stopped. exit /b :kill_Service taskkill /f /IM %filename% exit /b :start_Service echo ... starting service ... sc config %servicename% start= auto net start %servicename% exit /b :EOF
结果是:
c:\Users\kollenba\Documents\Temp>KapschServices.cmd xxx "Parameter: xxx" "Why the hell is xxx == Start?" ... starting service ... [SC] ChangeServiceConfig ERFOLG Der angeforderte Dienst wurde bereits gestartet.
我不明白为什么的条件
if /I "%1"=="START"
不按预期工作。 任何提示?
前提条件:必须使用pipe理员权限执行batch file以允许“networking启动”命令。 使用的操作系统:Windows 7
在批处理中,我们不使用括号来包含if语句,而是使用括号。 所以替换这个:
IF /I "%1"=="START" { echo "Why the hell is %1 == Start?" SET Parameter=start goto :execute } else if /I "%1"=="STOP" { SET Parameter=stop goto :execute }
通过这一个:
IF /I "%1"=="START" ( echo "Why the hell is %1 == Start?" SET Parameter=start goto :execute ) else if /I "%1"=="STOP" ( SET Parameter=stop goto :execute )
Service stopped.
之前,您也丢失了一个echo
Service stopped.
还有一个额外的提示:你实际上不需要:EOF
标签,因为goto :EOF
总是会把你带到文件结尾