现在,我正在编写一个批处理文件,其中包含一行,用于识别进程是否从我的进程列表中运行。
我指的是:
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto ProcessFound
EXE事先定义为EXE = My Process Here.exe
我的批处理文件适用于正常进程,但正如您在My Process Here.exe中看到的那样,My和Process以及Here.exe之间存在空格,这是无法识别的。
有什么方法可以解决这个问题吗?我正在寻找的过程有空格,我无法更改进程名称,因为它与之相关的程序将无法运行。
感谢。
答案 0 :(得分:0)
@ECHO OFF
SETLOCAL
SET "exe=7+ Taskbar Tweaker.exe"
FOR /F %%x IN ('tasklist ^|FINDSTR /i /b /L /c:"%EXE%"') DO IF NOT ERRORLEVEL 1 goto ProcessFound1
ECHO "%exe%" not found
GOTO again
:Processfound1
ECHO "%exe%" found!
:again
SET "exe=I dont exist.exe"
FOR /F %%x IN ('tasklist ^|FINDSTR /i /b /L /c:"%EXE%"') DO IF NOT ERRORLEVEL 1 goto ProcessFound1
ECHO "%exe%" not found
GOTO :eof
:Processfound2
ECHO "%exe%" found!
GOTO :EOF
这可能对你有用。当然,您需要修复进程名称。
答案 1 :(得分:0)
@echo off
setlocal enableextensions disabledelayedexpansion
set "exe=My Process Here.exe"
set "processFound="
for /f "tokens=5 delims=," %%a in ('
tasklist /fi "imagename eq %exe%" /fo:csv /nh
') do set "processFound=1"
if defined processFound (
echo %exe% is running
) else (
echo %exe% is NOT running
)
tasklist
将检索指定图像名称和csv格式的进程列表,不带标题。
有两个选项:进程未运行,然后输出中没有csv记录,或者进程正在运行,并且ouptut中有csv记录。
for
命令将尝试对tasklist
的输出进行标记,并使用逗号作为分隔符检索行中的第5个标记。
如果tasklist
的输出是csv记录,则此标记将存在,可替换参数将获取数据,并且将执行do
子句中的代码。如果输出不是csv记录,则该标记将不存在,并且do
子句中的代码将不会被执行。
答案 2 :(得分:0)
之前的答案都没有用于识别带有嵌入空格的图像名称。对我有用的是使用“delims = tab”,其中tab是实际的制表符,如:
FOR /F "delims=tab" %%X IN ('tasklist /NH /FI "IMAGENAME eq !EXE!"') DO (...
结果%% X将是对应于!EXE的整个任务列表条目! imagename,如果找到,或“INFO:没有正在运行的任务与指定的条件匹配”,如果找不到,可以通过以下方式执行:
SET TASKLINE=%%X
IF "!TASKLINE!"=="!TASKLINE:No tasks are running=!" (
ECHO !EXE! FOUND IN !TASKLINE!
) ELSE (
ECHO !EXE! NOT FOUND IN !TASKLINE!))