windows - 任务列表未检测/支持超过 21 个字符的进程名称

标签 windows batch-file cmd

我希望我的批处理文件在继续执行代码之前检查进程名称是否存在并且正在使用 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/

相关文章:

c++ - windows - 如何链接 API 集 (*ms-win*) 而不是 kernel32.dll、ntdll.dll 等?

batch-file - 如何添加右键单击选项以使用所选文件的名称搜索网络?

visual-studio - 来自 Cygwin 的 "Source"VsDevCmd.bat

vba - 从 VBA 运行带有多行的 Shell 命令/批处理文件

windows - “was unexpected at this time.”

c - 如何检测对方在 TCP 套接字上调用了 shutdown()?

java - 在 Java Web 应用程序中获取 Windows 登录详细信息

windows - 设置为 diff-highlight 的 Git 寻呼机在 Windows 10 中不起作用

Windows 'dir' 命令 : sort files by date when '/s' is specified

windows - 如何在没有路径名CMD的情况下列出目录/子目录中的所有文件?