我需要创建一个Windows批处理文件(* .bat)文件,该文件仅在某些进程(和批处理文件)未运行时才运行其命令。
我在这里查看了适用于进程(* .exe)的解决方案: How to wait for a process to terminate to execute another process in batch file
我想做一些非常相似的事情,但是,有一个难点:批处理文件在“TASKLIST”命令中显示为“cmd.exe”。
我想检查特定的bat文件是否正在运行,例如:“C:\ mybatch.bat”,如果是,请等到它关闭。
答案 0 :(得分:0)
默认情况下你说的是什么。
要测试,创建一个新的.bat文件(假设为1.bat)并放入其中
计算值
MSPAINT
保存并运行它。 计算器将启动。您会注意到Paitbrush只有在您关闭计算器时才会启动。
答案 1 :(得分:0)
检查特定的bat文件mybatch.bat
是否正在运行可能比一见即时更艰巨的任务。
在tasklist /V
中查找特定窗口标题以及在CommandLine
中测试wmic process where "name='cmd.exe'" get CommandLine
属性可能会在某些可以想象的情况下失败。
<强>第一即可。你能
吗?title ThisIsDistinguishingString
开头添加mybatch.bat
命令和 title
和 mybatch.bat
个命令
mybatch.bat
不调用包含title
命令的其他批处理脚本?然后检查从find
command返回的errorlevel
,如下所示:
:testMybatch
tasklist /V /FI "imagename eq cmd.exe" | find "ThisIsDistinguishingString" > nul
if errorlevel 1 (
rem echo mybatch.bat batch not found
) else (
echo mybatch.bat is running %date% %time%
timeout /T 10 /NOBREAK >NUL 2>&1
goto :testMybatch
)
<强>第二即可。否则,请检查wmic
Windows Management Instrumentation command输出是否有帮助
wmic process where "name='cmd.exe'" get /value
然后你可以在其输出中检测到mybatch.bat
缩小为
wmic process where "name='cmd.exe'" get CommandLine, ProcessID
请注意wmic
可能会返回一些Win32_Process
class属性,特别是CommandLine
,为空,如果某个特定进程是在另一个用户帐户下启动或已提升(运行为管理员)。
提升wmic
完整返回所有属性。