我正在尝试使用以下代码
使用tasklist命令获取远程进程的状态for /f "tokens=1-2 delims=," %%A in (TaskList.txt) do (
SET ServerName=
SET taskName=
SET _ServerName=%%A
SET _taskName=%%B
echo !_ServerName!,!_taskName!
tasklist.exe /s !_ServerName! /u nbccadmin /p Project@123 /FI " IMAGENAME eq !_taskName!" > Result.txt
Find /i "PID" < Result.txt
echo %ERRORLEVEL%
IF %ERRORLEVEL% == 0 (
echo !_ServerName!,!_taskName!,Running >> TaskStatus.csv
)
find /i "No tasks are running" < Result.txt
echo %ERRORLEVEL%
IF %ERRORLEVEL%==0 (
echo !_ServerName!,!_taskName!,Not Running >> TaskStatus.csv
)
)
我面临的问题是,当我使用FIND命令搜索值&#34; PID&#34;或&#34;没有任务正在运行&#34;,返回的ERRORLEVEL始终为0,即使进程未运行。
我不知道为什么会这样。
请帮我解决这个问题
答案 0 :(得分:2)
在块语句(a parenthesised series of statements)
中,解析整个块并执行然后。块中的任何%var%
将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于FOR ... DO (block)
。< / p>
因此,%errorlevel%
会在分析时被errorlevel
的值替换。
您可以使用!errorlevel!
,因为您显然已调用enabledelayedexpansion
(因为您使用!var!
但未向我们展示整个批次。)
或者您可以使用原始格式的errorlevel
if errorlevel n dosomething
如果errorlevel
为n
或大于 n
,则为真。在此表单中,errorlevel
是errorlevel
的运行时值。
由于您对errorlevel==0
感兴趣,因此常见表格为
if not errorlevel 1 (dothis) else (dothat)
(即使我厌恶双重否定。)