我有一个问题,希望有人可以提供帮助。
背景:比方说,我有6个.exe由6个独立的计划任务启动(.exe以客户端命名,看起来像这样 - CLIENTNAME_PROGRAM.EXE)。这6个任务在3个独立的用户帐户下运行以进行调度。这意味着,我可以在不同的帐户下同时运行2个进程(您无法在一个ID下同时运行它们)。如果你使用一个ID,你必须运行一个,等待它结束,然后等待下一个。
问题:我的批处理文件中有一些代码,它会查找另一个进程并等待它结束...但是,这是在所有进程的.exe名称相同时编写的(在我们转到CLIENTNAME_PROGRAM.EXE之前,曾经只是PROGRAM.EXE)。问题是,我刚刚意识到我的%TFProName%变量被设置为当前正在尝试运行的客户端的名称...因此它不会查找在同一台计算机下运行的任何其他TFProName目前卡住的帐户。这有意义吗?
所以,我需要:
在用户ACCOUNT1下启动CLIENT2_PROGRAM之前,搜索在ACCOUNT1下运行的任何其他* _PROGRAM进程并等待它结束。如果运行时间很长,请运行powershell脚本来终止所述进程。
以下是我的代码段:
:PRVARCHSTART
tasklist /FI "IMAGENAME eq %TFProName%" | find /I "%TFProName%" >nul
IF ERRORLEVEL 1 (
echo **** %TIME% - Another archive process is not running...checking for an import/export process... **** >> "%logfilefolder%\%logfilename%"
goto PRVARCHEND
) ELSE (
echo **** %TIME% - Another archive is running...please wait...checking again... **** >> "%logfilefolder%\%logfilename%"
PING 1.1.1.1 -n 1 -w 5000 >nul
powershell "& '%scriptdirectory%\KillTFProAdmin.ps1'"
goto PRVARCHSTART
)
:PRVARCHEND
答案 0 :(得分:0)
只测试tasklist
输出中的任何行是否通过了两个过滤器,帐户和可执行文件。
set "loop=0"
set "loopLimit=2"
:PRVARCHSTART
set "process="
for /f "tokens=2 delims=," %%a in ('
tasklist /v /fo:csv /nh ^| findstr /l /c:"%username%" ^| findstr /l /c:"_program.exe"
') do (
set /a "loop+=1"
set "process=%%~a"
)
if not defined process goto :PRVARCHEND
if %loop% geq %loopLimit% (
taskkill /pid %process% /f
goto :PRVARCHEND
)
ping -n 2 localhost >nul 2>nul
goto :PRVARCHSTART
:PRVARCHEND
如果未找到任何流程,请继续
如果找到了进程,请对其进行旋转并增加循环计数器
如果达到限制,则终止进程,否则等待并重复该过程
答案 1 :(得分:0)
这是我现在使用的代码,效果很好:
:PRVARCHSTART
tasklist /FI "IMAGENAME eq %TFProName%" | find /I "%TFProName%" >nul
IF ERRORLEVEL 1 (
echo **** %TIME% - Another archive process is not running...checking for an import/export process... **** >> "%logfilefolder%\%logfilename%"
goto PRVARCHEND
) ELSE (
echo **** %TIME% - Another archive is running...please wait...checking again... **** >> "%logfilefolder%\%logfilename%"
PING 1.1.1.1 -n 1 -w 5000 >nul
powershell "& '%scriptdirectory%\KillTFProAdmin.ps1'"
goto PRVARCHSTART
)
:PRVARCHEND