uc9 发表于 2016-7-19 10:23:32

请高手帮忙批处理怎么解决?

本帖最后由 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 11:15:00

本帖最后由 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
        )

)



uc9 发表于 2016-7-19 13:26:06

dos时代菜鸟 发表于 2016-7-19 11:15
循环判断 系统进程中是否存在 001.exe 如果不存在就运行 002.exe ,10秒后关闭002进程,,循环间隔 10秒。

...

用了你的代码,以.bat执行
进程一闪就消失了
希望的功能是能够,常驻运行
win7.x64
谢谢

dos时代菜鸟 发表于 2016-7-19 14:17:29

本帖最后由 dos时代菜鸟 于 2016-7-19 14:21 编辑

uc9 发表于 2016-7-19 13:26
用了你的代码,以.bat执行
进程一闪就消失了
希望的功能是能够,常驻运行


这种 利用 cmd 实现 死循环,并在循环中调用 外部命令 的cmd脚本,运行效率不高,本人不建议常驻内存。
如果非要如此,应该考虑编写 vbs 或者 powershell 或者 exe .

可以把 需要驻留内存的 001 类的程序 和不需要 存在的 002 类程序 imagename 统统写入一个txt 文件做数据库,交由 脚本 处理。如此就可以处理 更多的需要监视的进程。

uc9 发表于 2016-7-19 15:01:32

dos时代菜鸟 发表于 2016-7-19 14:17
这种 利用 cmd 实现 死循环,并在循环中调用 外部命令 的cmd脚本,运行效率不高,本人不建议常驻内存。
...

感谢帮助,本人程式一窍不通
只好原来的,继续使用--

dos时代菜鸟 发表于 2016-7-20 10:19:54

没看明白 ,
1.你是说,我那个 脚本一运行 就 消失了?没有发挥作用?
2.还是,脚本发挥了作用,你那个 不想要的 002 进程瞬间就关闭了?

要是你自己不会改 脚本,连 notepad 换成 001 都不会,那就只能算了。
你原来的 脚本是搜索 tasklist 指令返回文本 中的 "咨询:" ,而我在 win7.x86中发现,应该是 "信息:" ,这个和语言环境有关系,难道你用的是 繁体?这个也需要你自己改。


窄口牛 发表于 2016-7-20 11:03:06

字体不是繁体,但措辞是繁体,我猜是港或台简体。

uc9 发表于 2016-7-20 15:24:10

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 大大真厉害
这个脚本一运行,就消失了,完全没有发挥作用

yfwang0798 发表于 2016-7-20 16:50:47

每检查一次后,应释放 %%a 清空变量的值,释放内存空间。

窄口牛 发表于 2016-7-20 17:22:24

那你必须把汉字都改了,也得把措辞改对,比如信息必须改成資詢

nttwqz 发表于 2016-7-20 23:26:16

仅学过几天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





nttwqz 发表于 2016-7-21 01:40:03

批处理,同样假设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

uc9 发表于 2016-7-21 06:52:57

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才能开启

uc9 发表于 2016-7-21 06:54:57

nttwqz 发表于 2016-7-21 01:40
批处理,同样假设001.exe和002.exe能直接运行打开

用了你的批处理,以.bat执行
进程一闪就消失了

nttwqz 发表于 2016-7-21 11:55:18

uc9 发表于 2016-7-21 06:54
用了你的批处理,以.bat执行
进程一闪就消失了


ps001.exe进程需要用002.exe才能开启

如果有其它问题,请一并说清楚,因为我不知道你是怎么用的。我还怕打开批处理的时候002已经开启,所以开头加了检测等待结束以免重复运行,看来是多余了

你说的进程消失,是说的哪个进程,001?002?还是说我的批处理,批处理我试了几分钟没有问题。

001是在002启动后才能启动,还是用002去启动001?

uc9 发表于 2016-7-21 12:56:14

nttwqz 发表于 2016-7-21 11:55
如果有其它问题,请一并说清楚,因为我不知道你是怎么用的。我还怕打开批处理的时候002已经开启,所 ...

001因为有检测,需要用002开起过检测
因为001每30分钟还会检测一次
所以需要每运行30分再重启一次
002开启001有时候会失败


进程消失,是说的哪个进程------ 批处理消失
批处理以.bat执行,画面一闪就不见了

AU3的方法测试8个小时没问题

nttwqz 发表于 2016-7-21 18:25:16

uc9 发表于 2016-7-21 12:56
001因为有检测,需要用002开起过检测
因为001每30分钟还会检测一次
所以需要每运行30分再重启一次


两个人的批处理都一闪而过?!

不知道你是怎么另存为的,不要点击那个复制,手动选择复制,打开记事本,自动换行取消,另存为一定要选ASCII编码。

既然au3没问题,我在帮你实现重启001就可以了。

001应该怎么启动?先启动002,等002启动后,再启动001,然后10秒后结束002?

还是,直接重启001,不管002

uc9 发表于 2016-7-21 18:57:11

nttwqz 发表于 2016-7-21 18:25
两个人的批处理都一闪而过?!

不知道你是怎么另存为的,不要点击那个复制,手动选择复制,打开记事本 ...

感谢ntt大的回覆

启动002就会启动开启001
反正就是001不存在时
就开启002来启动001
001开启后就要关闭002
30分钟关闭001一次
叙述有点不好请原谅

窄口牛 发表于 2016-7-21 19:34:31

002是启动001的,没有001就用002来启动它。30分钟要关闭一次001。

nttwqz 发表于 2016-7-22 14:06:23

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:07:08

先试试,不晓得可用半小时可用否,计时可能会不准确或错误。

uc9 发表于 2016-7-22 16:01:14

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又自动重自更好
不过这样也可以用,反正知道用法就好
谢谢大家的帮忙

nttwqz 发表于 2016-7-22 17:51:00

uc9 发表于 2016-7-22 16:01
刚刚测试计时不会和001同步
我设定5分自动重自
15/5开始15/10自动重自


你自己改成5分钟了?

获取进程运行时间目前无法做到,不过批处理我倒是知道

所以,我是从脚本开始计时的,并不是001的运行时间

uc9 发表于 2016-7-22 20:06:19

nttwqz 发表于 2016-7-22 17:51
你自己改成5分钟了?

获取进程运行时间目前无法做到,不过批处理我倒是知道


改5分钟是测试用
我现在还是用第一次的版本
感谢
ntt大的帮忙

鲁a4cb79 发表于 2016-9-5 14:11:18

为什么回复也要那么多字啊.........UR银盾uryindun.com
UR银盾钢化膜aiyanm.com











static/image/common/sigline.gif
看帖是心情,回帖是道德
UR银盾uryindun.com
UR银盾钢化膜aiyanm.com

wushb 发表于 2016-9-12 14:10:06

相信楼主的说,非常支持你











static/image/common/sigline.gif
民间捉鬼师,重庆民间道士

qq909877 发表于 2019-10-5 19:45:43

gdd123123 发表于 2021-5-18 22:44:48

请教各位大神们如何把USB和网卡的电源节能模式关掉做成批处理或者脚本
页: [1]
查看完整版本: 请高手帮忙批处理怎么解决?