2015-06-14 55 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行上的引號應該在那裏嗎?

具有更好批次技能的人會說出來;我不想冒着誤導你的半信半疑的猜測。在此期間,我建議您直接在命令行中使用該行,直到獲得您期望的結果爲止。請記住將批處理腳本外部的%字符去除一倍。