批处理 - 不期望命令

时间:2016-03-31 11:22:43

标签: batch-file

当我运行以下代码时,我得到“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回音选项“!停止!”不存在!不能正常工作

1 个答案:

答案 0 :(得分:0)

问题是你在这里有一个左括号:

if %errorlevel%==0 (

这意味着直到右括号的所有命令都被视为在一行上都有。环境变量立即扩展。特别是,它试图扩展%stop%。但是,您尚未对其进行定义,因此它会扩展为空字符串,您的if语句如下所示:

if ==1 taskkill [etc...]

您需要做的是使用延迟扩展。从the link阅读Dennis van Gils' comment