2015-06-14 54 views
1

我有下一个代码批导致我“ECHO OFF”,而不是正确的结果

@Echo off 
Title STARTING 
cls 
echo. 
echo Checking running services... 
echo. 
timeout /t 2 /nobreak >NUL 
tasklist /fi "imagename eq cmd.exe" /v | find /I /N "DATABASESERVER" >NUL 
if "%ERRORLEVEL%"=="1" (
cls 
echo. 
echo Database is not running, now will start! 
echo. 
start database.bat 
echo Database is running! 
echo. 
timeout /t 4 /nobreak >NUL 
) 
tasklist /fi "imagename eq cmd.exe" /v | find /i /n "ARMASERVER" >NUL 
if "%errorlevel%"=="1" (
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
    set /A "ora=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100" 
) 
echo %ora% 
pause 
cls 
echo. 
echo Server is not running, now will start! 
echo. 
start arma.bat 
title EPOCHSERVER 
timeout /t 39 /nobreak >NUL 
) 

的问题一个小问题是,“回声%ORA%”它给我结果“回声关”,而不是以秒为单位的时间值

问题是什么?

预先感谢您!

回答

1

您需要enable delayed expansion

tasklist /fi "imagename eq cmd.exe" /v | find /i /n "ARMASERVER" >NUL 
if "%errorlevel%"=="1" (
    for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
    set /A "ora=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100" 
) 
    echo percent inside ^(^)=%ora% 
    setlocal enabledelayedexpansion 
    echo exclamation=!ora! 
    endlocal 
) 
echo percent outside ^(^)=%ora% 

输出:

==>D:\bat\SO\30834591.bat 
percent inside()= 
exclamation=214860 
percent outside()=214860 

==> 
1

%ora%在这一点是空的,这意味着正在执行的命令只是echo,它返回回声状态。

您确定set行上的引号应该在那里吗?

具有更好批次技能的人会说出来;我不想冒着误导你的半信半疑的猜测。在此期间,我建议您直接在命令行中使用该行,直到获得您期望的结果为止。请记住将批处理脚本外部的%字符去除一倍。