当我运行以下代码时,我得到“taskkill is expected”。在我设置%stop%的值之前程序关闭。我该如何解决这个错误?
@echo off
set ucs=ucs.exe
cls
echo.
echo Check %ucs%...
tasklist /FI "IMAGENAME eq %ucs%" 2>NUL | find /I /N "%ucs%">NUL
if %errorlevel%==0 (
echo %ucs% is running!
echo You need to stop it before editing ucsdb
echo 1 - Stop
echo 0 - Menu
set /p "stop=Stop %ucs%?"
if %stop%==1 taskkill /im %ucs% /t && goto sqlitebrowser
if %stop%==0 goto sqlitemenu
if not %stop%==1 if not %stop%==2 echo Option "%stop%" not exist! && timeout /t 2 /nobreak >NUL && goto sqlitemenu
) ELSE (
echo %ucs% is not running
echo Loading SqliteBrowser...
timeout /t 2 /nobreak >nul
goto sqlitebrowser )
代码编辑:
setlocal EnableDelayedExpansion
cls
echo.
echo Check %ucs%...
pause
tasklist /FI "IMAGENAME eq %ucs%" 2>NUL | find /I /N "%ucs%">NUL
if %errorlevel%==0 (
echo %ucs% is running!
echo You need to stop it before editing ucsdb
echo 1 - Stop
echo 0 - Menu
set /p "stop=Stop %ucs%?"
if !stop!==1 taskkill /im %ucs% /t && goto sqlitebrowser
if !stop!==0 goto sqlitemenu
if not !stop!==1 if not !stop!==0 echo Options "!stop!" not exist! && timeout /t 2 /nobreak >nul && goto sqlitemenu
...
如果没有!停止!== 1如果没有!停止!== 0回音选项“!停止!”不存在!不能正常工作
答案 0 :(得分:0)
问题是你在这里有一个左括号:
if %errorlevel%==0 (
这意味着直到右括号的所有命令都被视为在一行上都有。环境变量立即扩展。特别是,它试图扩展%stop%
。但是,您尚未对其进行定义,因此它会扩展为空字符串,您的if
语句如下所示:
if ==1 taskkill [etc...]
您需要做的是使用延迟扩展。从the link阅读Dennis van Gils' comment。