我写了可以在某些服务中使用的bat文件,并尝试使用输入参数在其中实现菜单,但是无法读取此参数。有代码:
@ECHO OFF
SET SvcName=QTCE
SC QUERYEX "%SvcName%" | FIND "STATE" | FIND /v "RUNNING" > NUL && (
ECHO %SvcName% is not running
ECHO.
ECHO Don't worry ! We start it now!
net start QSERVER
net start QTCE
ECHO.
ECHO "%SvcName%" is started
) || (
ECHO "%SvcName%" is running
ECHO.
ECHO What do you whant i do ?
ECHO.
ECHO 1 - RESTART QTCE
ECHO 2 - STOP QTCE
ECHO.
SET /p var="Type 1, 2 then press ENTER: "
ECHO ENTERED "%var%"
ECHO Done! Yo're welcome ..
)
pause
但是当我启动它时,什么也没有:
答案 0 :(得分:2)
未显示变量%var%
的原因是因为变量SET
位于括号代码块中。防止这种情况发生的通常方法是启用延迟扩展,并将%
字符替换为!
。
在这样的单个情况下,有一个更简单的解决方法,即调用CALL
命令:
CALL ECHO ENTERED "%%var%%"
我决定发布此答案作为对我的评论的更新,因为:
SC QUERYX "%SvcName%"
应该是SC QUERY "%SvcName%"
。FIND
甚至是FINDSTR
NET
时,无需使用SC
。使用FIND
:
@ECHO OFF
SET "SvcName=QTCE"
SC QUERY | FIND /I "%SvcName%" > NUL && (
ECHO %SvcName% is running
ECHO=
ECHO What do you want to do?
ECHO=
ECHO 1 - RESTART QTCE
ECHO 2 - STOP QTCE
ECHO=
SET /P "var=Type 1, 2 then press ENTER: "
CALL ECHO ENTERED "%%var%%"
ECHO Done! You're welcome ..
) || (
ECHO %SvcName% is not running
ECHO=
ECHO Don't worry! We'll start it now!
IF /I "%SvcName%"=="QTCE" SC START QSERVER
SC START %SvcName%
ECHO=
ECHO "%SvcName%" is started
)
PAUSE
要使用FINDSTR
而不是将上面的行3
替换为:
SC QUERY "%SvcName%" | FINDSTR /RC:"STATE.*: 4" >NUL && (
注意
以上内容不能解决代码中的其他问题,可以启动尚未检查状态的服务,并通知最终用户无需检查即可启动服务它有。另外,取决于您如何扩展代码,您只能重新启动已暂停的服务,而不能等待继续。
编辑
出于礼貌,根据您的评论和我的回答,这是脚本的基本重组,它避免了使用延迟扩展的需要,而不是SET
在带括号的代码块中使用%var%
。
@ECHO OFF
SET "SvcName=QTCE"
SC QUERY | FIND /I "%SvcName%" > NUL || GOTO SVCSTART
ECHO %SvcName% is running
ECHO=
ECHO What do you want to do?
ECHO=
ECHO 1 - RESTART %SvcName%
ECHO 2 - STOP %SvcName%
ECHO=
SET /P "var=Type 1, 2 then press ENTER: "
ECHO ENTERED "%var%"
ECHO Done! You're welcome ..
PAUSE
GOTO :EOF
:SVCSTART
ECHO %SvcName% is not running
ECHO=
ECHO Don't worry! We'll start it now!
IF /I "%SvcName%"=="QTCE" SC START QSERVER
SC START %SvcName%
ECHO=
ECHO "%SvcName%" is started
PAUSE
GOTO :EOF
答案 1 :(得分:0)
就是这样!
CALL ECHO ENTERED "%%var%%"
感谢所有人