请高手帮忙批处理怎么解决?
本帖最后由 uc9 于 2016-7-22 20:05 编辑请问这个批处理,需要怎么修改
执行久了,很容易当机
:go
timeout /t 10
tasklist /FI "IMAGENAME eq 001.exe" /FO CSV > search.log
FOR /F %%A IN (search.log) do if %%A == 资讯: goto process_off
:process_on
goto end
:process_off
start 002.exe
timeout /t 10
taskkill /f /im 002.exe
:end
del search.log
goto go 本帖最后由 dos时代菜鸟 于 2016-7-19 12:08 编辑
循环判断 系统进程中是否存在 001.exe 如果不存在就运行 002.exe ,10秒后关闭002进程,,循环间隔 10秒。
1、将当前进程转换成文件通过 for 调取,可能造成时间上的误差,
2、002进程未必能在10秒后开启,
所以给你改进如下:
1、直接用 for 对tasklist命令结果进行分析 2、增加 002 进程的存在的循环判断。 win7.ch.x86 环境调试通过。
@echo off
:loop1
echo.
echo loop1 循环监视 notepad.exe 进程,如果进程消失,就启动 iexplore.exe
timeout /t 10/nobreak >nul
FOR /F %%A IN ('tasklist /FI "IMAGENAME eq notepad.exe" /FO CSV') do (
if "%%A" == "信息:" (
start iexplore.exe
:loop2
echo.
echo loop2循环等待 iexplore.exe 进程,如果出现就关闭之,并退出 loop2 循环
timeout /t 5 /nobreak >nul
FOR /F"skip=1"%%A IN ('tasklist /FI "IMAGENAME eq iexplore.exe" /FO CSV') do (
taskkill /f /im iexplore.exe
goto loop1
)
goto loop2
) else (
goto loop1
)
)
dos时代菜鸟 发表于 2016-7-19 11:15
循环判断 系统进程中是否存在 001.exe 如果不存在就运行 002.exe ,10秒后关闭002进程,,循环间隔 10秒。
...
用了你的代码,以.bat执行
进程一闪就消失了
希望的功能是能够,常驻运行
win7.x64
谢谢 本帖最后由 dos时代菜鸟 于 2016-7-19 14:21 编辑
uc9 发表于 2016-7-19 13:26
用了你的代码,以.bat执行
进程一闪就消失了
希望的功能是能够,常驻运行
这种 利用 cmd 实现 死循环,并在循环中调用 外部命令 的cmd脚本,运行效率不高,本人不建议常驻内存。
如果非要如此,应该考虑编写 vbs 或者 powershell 或者 exe .
可以把 需要驻留内存的 001 类的程序 和不需要 存在的 002 类程序 imagename 统统写入一个txt 文件做数据库,交由 脚本 处理。如此就可以处理 更多的需要监视的进程。 dos时代菜鸟 发表于 2016-7-19 14:17
这种 利用 cmd 实现 死循环,并在循环中调用 外部命令 的cmd脚本,运行效率不高,本人不建议常驻内存。
...
感谢帮助,本人程式一窍不通
只好原来的,继续使用-- 没看明白 ,
1.你是说,我那个 脚本一运行 就 消失了?没有发挥作用?
2.还是,脚本发挥了作用,你那个 不想要的 002 进程瞬间就关闭了?
要是你自己不会改 脚本,连 notepad 换成 001 都不会,那就只能算了。
你原来的 脚本是搜索 tasklist 指令返回文本 中的 "咨询:" ,而我在 win7.x86中发现,应该是 "信息:" ,这个和语言环境有关系,难道你用的是 繁体?这个也需要你自己改。
字体不是繁体,但措辞是繁体,我猜是港或台简体。 dos时代菜鸟 发表于 2016-7-20 10:19
没看明白 ,
1.你是说,我那个 脚本一运行 就 消失了?没有发挥作用?
2.还是,脚本发挥了作用,你那个...
@echo off
:loop1
echo.
echo loop1 循环监视 notepad.exe 进程,如果进程消失,就启动 02.exe
timeout /t 10/nobreak >nul
FOR /F %%A IN ('tasklist /FI "IMAGENAME eq 01.exe" /FO CSV') do (
if "%%A" == "信息:" (
start 02.exe
:loop2
echo.
echo loop2循环等待 02.exe 进程,如果出现就关闭之,并退出 loop2 循环
timeout /t 5 /nobreak >nul
FOR /F"skip=1"%%A IN ('tasklist /FI "IMAGENAME eq 02.exe" /FO CSV') do (
taskkill /f /im 02.exe
goto loop1
)
goto loop2
) else (
goto loop1
)
没错我用的是繁体,win7-x64 大大真厉害
这个脚本一运行,就消失了,完全没有发挥作用 每检查一次后,应释放 %%a 清空变量的值,释放内存空间。 那你必须把汉字都改了,也得把措辞改对,比如信息必须改成資詢 仅学过几天AU3,水平有限,简单编了个小工具,测试有效。
附件是编译好的,杀毒软件一般都会报毒(小a检测通过),特别是360(连bat都不放过,何况...),所以一定要添加例外,或者允许。
不放心可以自己下载au3安装编译。当然,这是能用的前提下。。。
#include <Misc.au3>
If _Singleton("test", 1) = 0 Then Exit
#pragma compile(UPX, true)
#pragma compile(Compression, 9)
#pragma compile(FileDescription, "循环检测001.exe进程,然后操作002.exe")
;在运行里输入001.exe或002.exe能打开的,本程序才能正常工作
;否则请编辑环境变量Path,将001.exe和002.exe的目录添加进去就可以了
While 1
If Not ProcessExists("001.exe") Then
ShellExecute("002.exe")
If ProcessExists("002.exe") Then
Sleep(10000)
ProcessClose("002.exe")
EndIf
EndIf
Sleep(10000)
WEnd
批处理,同样假设001.exe和002.exe能直接运行打开
@echo off
mode con: cols=30 lines=10
echo CreateObject^("Shell.Application"^).ShellExecute "%~f0", "", "", "runas", 1 > "%temp%\getadmin.vbs"
reg query HKU\S-1-5-20>nul 2>nul||cscript //b "%temp%\getadmin.vbs"&&del "%temp%\getadmin.vbs" /f /q>nul 2>nul&&exit /b
title C001D002
color 2f
echo.&echo.&echo.&echo.
set /p=│ 执行中... │<nul
:start
wmic process where "name='002.exe'" get name 2>nul | find /i "002.exe" >nul 2>nul
if %errorlevel%==0 (
timeout /t 10 /nobreak >nul 2>nul
taskkill /im 002.exe /f >nul 2>nul
)
wmic process where "name='001.exe'" get name 2>nul | find /i "001.exe" >nul 2>nul
if not %errorlevel%==0 (
start 002.exe
call :002openwait
) else (
timeout /t 10 /nobreak >nul 2>nul
goto start
)
:002openwait
wmic process where "name='002.exe'" get name 2>nul | find /i "002.exe" >nul 2>nul
if %errorlevel%==0 (
timeout /t 10 /nobreak >nul 2>nul
taskkill /im 002.exe /f >nul 2>nul
) else (
goto 002openwait
)
timeout /t 10 /nobreak >nul 2>nul
goto start
nttwqz 发表于 2016-7-20 23:26
仅学过几天AU3,水平有限,简单编了个小工具,测试有效。
附件是编译好的,杀毒软件一般都会报毒(小a检 ...
#include <Misc.au3>
If _Singleton("test", 1) = 0 Then Exit
#pragma compile(UPX, true)
#pragma compile(Compression, 9)
#pragma compile(FileDescription, "循环检测001.exe进程,然后操作002.exe")
;在运行里输入001.exe或002.exe能打开的,本程序才能正常工作
;否则请编辑环境变量Path,将001.exe和002.exe的目录添加进去就可以了
While 1
If Not ProcessExists("001.exe") Then
ShellExecute("002.exe")
If ProcessExists("002.exe") Then
Sleep(10000)
ProcessClose("002.exe")
EndIf
EndIf
Sleep(10000)
WEnd
谢谢ntt大,测试可用
如果要001.exe每运行30分钟后
关闭001.exe进程一次再重启,要如何修改
ps001.exe进程需要用002.exe才能开启 nttwqz 发表于 2016-7-21 01:40
批处理,同样假设001.exe和002.exe能直接运行打开
用了你的批处理,以.bat执行
进程一闪就消失了 uc9 发表于 2016-7-21 06:54
用了你的批处理,以.bat执行
进程一闪就消失了
ps001.exe进程需要用002.exe才能开启
如果有其它问题,请一并说清楚,因为我不知道你是怎么用的。我还怕打开批处理的时候002已经开启,所以开头加了检测等待结束以免重复运行,看来是多余了
你说的进程消失,是说的哪个进程,001?002?还是说我的批处理,批处理我试了几分钟没有问题。
001是在002启动后才能启动,还是用002去启动001? nttwqz 发表于 2016-7-21 11:55
如果有其它问题,请一并说清楚,因为我不知道你是怎么用的。我还怕打开批处理的时候002已经开启,所 ...
001因为有检测,需要用002开起过检测
因为001每30分钟还会检测一次
所以需要每运行30分再重启一次
002开启001有时候会失败
进程消失,是说的哪个进程------ 批处理消失
批处理以.bat执行,画面一闪就不见了
AU3的方法测试8个小时没问题 uc9 发表于 2016-7-21 12:56
001因为有检测,需要用002开起过检测
因为001每30分钟还会检测一次
所以需要每运行30分再重启一次
两个人的批处理都一闪而过?!
不知道你是怎么另存为的,不要点击那个复制,手动选择复制,打开记事本,自动换行取消,另存为一定要选ASCII编码。
既然au3没问题,我在帮你实现重启001就可以了。
001应该怎么启动?先启动002,等002启动后,再启动001,然后10秒后结束002?
还是,直接重启001,不管002 nttwqz 发表于 2016-7-21 18:25
两个人的批处理都一闪而过?!
不知道你是怎么另存为的,不要点击那个复制,手动选择复制,打开记事本 ...
感谢ntt大的回覆
启动002就会启动开启001
反正就是001不存在时
就开启002来启动001
001开启后就要关闭002
30分钟关闭001一次
叙述有点不好请原谅 002是启动001的,没有001就用002来启动它。30分钟要关闭一次001。 uc9 发表于 2016-7-21 18:57
感谢ntt大的回覆
启动002就会启动开启001
#include <Misc.au3>
#include <Timers.au3>
If _Singleton("test", 1) = 0 Then Exit
#pragma compile(UPX, true)
#pragma compile(Compression, 9)
#pragma compile(FileDescription, "循环检测001.exe,然后操作002.exe,且每30分钟重启001.exe")
Local $starttime, $nowtime, $endtime
$starttime = _Timer_Init()
While 1
$nowtime = Round(_Timer_Diff($starttime)/1000,2)
$endtime = $nowtime/1800
If ProcessExists("001.exe") And StringIsInt($endtime) Then
ProcessClose("001.exe")
ElseIf Not ProcessExists("001.exe") Then
ShellExecute("002.exe")
If ProcessExists("002.exe") Then
Sleep(10000)
ProcessClose("002.exe")
EndIf
Sleep(10000)
$nowtime -= 20
EndIf
WEnd 先试试,不晓得可用半小时可用否,计时可能会不准确或错误。 nttwqz 发表于 2016-7-22 14:06
刚刚测试计时不会和001同步
我设定5分自动重自
15/5开始15/10自动重自
15/13手动关闭001自动重自后 15/15又自动重自
15/20自动重自
15/21手动关闭001自动重自后 15/25又自动重自
如果能15/21关闭001自动重自后15/26又自动重自更好
不过这样也可以用,反正知道用法就好
谢谢大家的帮忙 uc9 发表于 2016-7-22 16:01
刚刚测试计时不会和001同步
我设定5分自动重自
15/5开始15/10自动重自
你自己改成5分钟了?
获取进程运行时间目前无法做到,不过批处理我倒是知道
所以,我是从脚本开始计时的,并不是001的运行时间 nttwqz 发表于 2016-7-22 17:51
你自己改成5分钟了?
获取进程运行时间目前无法做到,不过批处理我倒是知道
改5分钟是测试用
我现在还是用第一次的版本
感谢
ntt大的帮忙 为什么回复也要那么多字啊.........UR银盾uryindun.com
UR银盾钢化膜aiyanm.com
static/image/common/sigline.gif
看帖是心情,回帖是道德
UR银盾uryindun.com
UR银盾钢化膜aiyanm.com 相信楼主的说,非常支持你
static/image/common/sigline.gif
民间捉鬼师,重庆民间道士 请教各位大神们如何把USB和网卡的电源节能模式关掉做成批处理或者脚本
页:
[1]