我希望我的批处理文件在继续执行代码之前检查进程名称是否存在并且正在使用 TaskList 运行,但不幸的是,如果进程名称超过 21 个字符,它将无法工作。有办法取消字符限制或支持超过 21 个字符的进程名称吗?
我尝试使用任何其他不超过 21 个字符的进程名称,并且代码运行完美。我没有尝试过任何其他方法,因为我一直在网上查找,但找不到任何与我的确切问题匹配的内容,或者不知道为什么它不会检测到太长的进程名称。我减少了代码,使其更短、更容易理解。
@echo off
set ProcessName=PROCESSNAME
for /f "tokens=4-7 delims=[.] " %%i in ('ver') do (if %%i==Version (set v=%%j.%%k) else (set version=%%i.%%j))
if "%version%" == "10.0" goto win10
:win10
setlocal
echo Press any key to start...
pause >nul
tasklist /fi "IMAGENAME eq %ProcessName%.exe" 2>NUL | find /I /N "%ProcessName%.exe">NUL
if "%ERRORLEVEL%"=="1" (
goto error
)
echo Process detected.
pause
exit
:error
echo WARNING! This process is not running. Make sure it is running or written properly.
pause
要测试这一点,您可以创建一个假的 .exe 并给它一个长名称,然后在这一行替换该名称:
set ProcessName=PROCESSNAME
我希望支持任何包含 22 个字符及更多字符的进程名称。
最佳答案
您可以使用 /fo
开关更改 tasklist
的输出格式:
/FO format Specifies the output format.
Valid values: "TABLE", "LIST", "CSV".
将格式更改为 CSV
可以使用更大的进程名称。
试试这个:
tasklist /fo csv /fi "IMAGENAME eq %ProcessName%.exe" 2>NUL | find /I /N "%ProcessName%.exe">NUL
关于windows - 任务列表未检测/支持超过 21 个字符的进程名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56569414/