标题: [系统相关] 请老师给注释一下这个批处理 [打印本页]
作者: wssylxb 时间: 2022-5-9 12:12 标题: 请老师给注释一下这个批处理
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
:begin
set _task=foxtable
set _runexe=start.vbs
:checkstart
echo "检查进程"
for /f "tokens=5" %%c in ('qprocess.exe ^| find "%_task%"') do ( if %%c==" " ( @echo ) else goto checkag )
goto startsvr
:startsvr
echo ******开始启动程序*******
echo 启动时间 %time% >> restart.log
echo set ws=wscript.createobject("wscript.shell") >> %_runexe%
echo ws.run "foxtable.exe",0,false >> %_runexe%
start /b %_runexe%
echo Wscript.Sleep Wscript.Arguments(0) >%tmp%\delay.vbs
cscript //b //nologo %tmp%\delay.vbs 10000
del %_runexe% /Q
echo *******程序启动完成********
goto checkstart
:checkag
echo Wscript.Sleep Wscript.Arguments(0) >%tmp%\delay.vbs
cscript //b //nologo %tmp%\delay.vbs 10000
goto checkstart
作者: flashercs 时间: 2022-5-9 12:45
- @echo off
- if "%1" == "h" goto begin
- @REM 强制跳转:begin
- mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
- :begin
- set _task=foxtable
- set _runexe=start.vbs
-
- :checkstart
- @REM 若进程%_task%存在,则延迟10秒;若进程不存在,则启动程序.反复循环
- echo "检查进程"
- for /f "tokens=5" %%c in ('qprocess.exe ^| find "%_task%"') do ( if %%c==" " ( @echo ) else goto checkag )
- goto startsvr
-
- :startsvr
-
- echo ******开始启动程序*******
-
- echo 启动时间 %time% >> restart.log
- @REM 用start.vbs,隐藏窗口启动程序
- echo set ws=wscript.createobject("wscript.shell") >> %_runexe%
- echo ws.run "foxtable.exe",0,false >> %_runexe%
-
- start /b %_runexe%
-
- @REM 延迟10秒后删除start.vbs,继续检测进程
- echo Wscript.Sleep Wscript.Arguments(0) >%tmp%\delay.vbs
-
- cscript //b //nologo %tmp%\delay.vbs 10000
-
- del %_runexe% /Q
-
- echo *******程序启动完成********
-
- goto checkstart
-
-
- :checkag
- @REM 延迟10秒
- echo Wscript.Sleep Wscript.Arguments(0) >%tmp%\delay.vbs
-
- cscript //b //nologo %tmp%\delay.vbs 10000
-
- goto checkstart
复制代码
作者: wssylxb 时间: 2022-5-9 16:02
非常感谢老师的答复。我用这个批处理监控一个系统,想达到如果这个系统没有运行,自动运行的目的。但实际使用中偶而会出现同时启动了多个系统的情况,不知是什么原因。
作者: hlzj88 时间: 2022-5-10 23:27
我曾经写过检测server-U运行的bat,server-U运行有两个程序,两个必须同时都运行才可提供服务。
我的办法是tasklist同时监控两个,如果都存在就判定正常运行。否则taskill程序再启动。
如果楼主也是这样,可这样应用。监控一个程序,如果有,进入延时-再查 的循环。
tasklist|findstr /i "123.exe"&&goto ys || start "" "123.exe"
:ys
ping /n 120 127.1>nul
%0
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |