批处理结果我"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
)

问题是"echo %ora%"它给我的结果是"回显关闭",而不是以秒为单位的时间值

问题出在哪里?

提前谢谢你!

您需要启用延迟扩展:

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:batSO30834591.bat
percent inside ()=
exclamation=214860
percent  outside ()=214860
==>
此时

%ora%为空,这意味着正在执行的命令正好是echo,它返回回显的状态。

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

具有更好批处理技能的人会说出来;我不想冒险用我半知半解的猜测误导你。

同时,我建议您直接在命令行上使用该行,直到获得预期的结果。请记住在批处理脚本之外取消%字符的倍数。

最新更新