1. 使用dos命令监控进程
在Unix/Linux系统上,可以很方便的使用ps命令查看当前进程的活动情况;而在windows上,也有类似的命令,就是tasklist。
所以我们可以这样写一个脚本去监控进程是否存在并启动它。(假设进程名为1.exe)
@echo off
:checkloop
tasklist |findstr /I “1.exe” || start “” “C:/1.exe”
timeout /t 5
goto :checkloop
当然我们也可以监控并杀死进程,如下:
@echo off
:checkloop
tasklist |findstr /I “1.exe” || taskkill /F 1.exe
timeout /t 5
goto :checkloop
另外一个例子:(尚未研究明白)
@echo off
set "num=0"
:loop
for /f "tokens=2" %%i in ('tasklist ^|findstr "A.exe"') do (
if not defined %%i set %%i=%%i & set /a num+=1
if %num% GTR 5 taskkill /pid %%i /T &set /a num-=1&set "%%i="
)
ping 127.1 –n 10 >nul
goto :loop
关于tasklist和taskkill命令,可以查看其帮助文件获取更多信息。
2. Dos编程中的 setlocal 与变量延迟
先看个例子:
@echo off
set a=4
set a=5 & echo %a%
pause
执行完毕,显示: 4
再看一个例子:(开启变量延迟)
@echo off
setlocal enabledelayedexpansion
set a=4
set a=5 & echo !a!
pause
执行完毕,显示: 5
说明:
DOS中有一个变量延迟的概念,没有开启该功能之前,变量会被预读;而开启了之后,就允许在运行的当前行对变量赋值,如 set a=5 & echo !a!。这里注意,开启了功能之后,变量要用”!”引起来。
没有开启变量延迟的情况下,某条命令行的变量改变,必须到下一条才能体现。
不适用中间变量交换二者数据,如下:
@echo off
set var1=abc
set var2=123
echo 交换前: var1=%var1% var2=%var2%
set var1=%var2%& set var2=%var1%
echo 交换后: var1=%var1% var2=%var2%
pause