我需要使用 bat 文件检查程序是否在 tasksheduler 中运行。
最大的问题是这个程序是由外部人员编写的,名称中间有四个“。”。
我正在使用这个代码:
tasklist /fi "IMAGENAME eq Fls.Core.Portal.UI.Shell.exe" 2>NUL | find /I /N "Fls.Core.Portal.UI.Shell.exe">NUL
msg * %ERRORLEVEL%
goto Exit
由于程序运行落后,我期望返回错误级别 0,但它返回的是 1
我认为问题就出在程序名称中的这个“。”。
答案1
你不必担心如何处理.
,这不是这里出现此问题的原因,这仅与tasklist
输出中的长度字符长度有关。
参见tasklist
命令tasklist | find /i /n "Fls.Core.Portal.UI.Shell.exe"
应该导致:
[263]Fls.Core.Portal.UI.Shell.exe 8900 Console 1 4,076 K
但这永远不会发生,输出tasklist
使用精确姓名长度为 25 个字符并且你试图用一个字符串找到长度为 28 个字符 tasklist | find /i /n "Fls.Core.Portal.UI.Shell.exe"
因此,使用这个长度为 28 个字符的字符串你永远不会得到想要的结果:
尝试将字符串缩短至 25 个字符:
tasklist | find /i /n "Fls.Core.Portal.UI.Shell."
如果没有,你将永远得到这个输出
:exe
[263]Fls.Core.Portal.UI.Shell. 8900 Console 1 4,076 K
有人建议代码:
@echo off && setlocal enabledelayedexpansion
tasklist | find /I /N "Fls.Core.Portal.UI.Shell." >NUL && (
%__APPDIR__%msg.exe * !errorlevel! zOk, here i'm! & goto Exit:
)|| %__APPDIR__%msg.exe * !errorlevel! nOp, I'm not there! & goto Exit:
:Exit:
endlocal
要在运行查询过程中使用全名,请尝试使用wmic
wmic process where name="Fls.Core.Portal.UI.Shell.exe" get processid /value
wmic process where name="Fls.Core.Portal.UI.Shell.exe" get caption /value
wmic process where name="Fls.Core.Portal.UI.Shell.exe" get name /value
- 使用:
wmic process where name="Fls.Core.Portal.UI.Shell.exe" get name | find /v "Name"
- 输出:
Fls.Core.Portal.UI.Shell.exe
- 获取列出的完整列表描述:
wmic process where name="Fls.Core.Portal.UI.Shell.exe" get * /format:list
- 结果:
Caption=Fls.Core.Portal.UI.Shell.exe
CommandLine="C:\Users\ecker\AppData\Local\Temp\"Fls.Core.Portal.UI.Shell.exe"
CreationClassName=Win32_Process
CreationDate=20200423222440.079263-180
CSCreationClassName=Win32_ComputerSystem
CSName=LAME_SLUG
Description=Fls.Core.Portal.UI.Shell.exe
ExecutablePath=C:\Users\ecker\AppData\Local\Temp\Fls.Core.Portal.UI.Shell.exe
ExecutionState=
Handle=12752
HandleCount=79
InstallDate=
KernelModeTime=312500
MaximumWorkingSetSize=1380
MinimumWorkingSetSize=200
Name=Fls.Core.Portal.UI.Shell.exe
OSCreationClassName=Win32_OperatingSystem
OSName=Microsoft Windows 10 Pro|C:\Windows|\Device\Harddisk0\Partition4
OtherOperationCount=1505
OtherTransferCount=29348
PageFaults=2228
PageFileUsage=2624
ParentProcessId=11868
PeakPageFileUsage=4236
PeakVirtualSize=2203379519488
PeakWorkingSetSize=4288
Priority=8
PrivatePageCount=2686976
ProcessId=12752
QuotaNonPagedPoolUsage=6
QuotaPagedPoolUsage=46
QuotaPeakNonPagedPoolUsage=6
QuotaPeakPagedPoolUsage=46
ReadOperationCount=14
ReadTransferCount=822
SessionId=1
Status=
TerminationDate=
ThreadCount=1
UserModeTime=0
VirtualSize=2203378040832
WindowsVersion=10.0.18363
WorkingSetSize=4255744
WriteOperationCount=0
WriteTransferCount=0
- 进一步阅读:
[√]西米克
答案2
您的命令过于复杂了。下面这个就足够了,而且效果更好:
tasklist | find /I /N "Fls.Core.Portal.UI.Shell.exe">NUL