无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 11319|回复: 29
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 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
2#
发表于 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 环境调试通过。



  1. @echo off
  2. :loop1
  3. echo.
  4. echo loop1 循环监视 notepad.exe 进程,如果进程消失,就启动 iexplore.exe
  5. timeout /t 10  /nobreak >nul
  6. FOR /F %%A IN ('tasklist /FI "IMAGENAME eq notepad.exe" /FO CSV') do (
  7.          if "%%A" == "信息:" (
  8.                 start iexplore.exe
  9. :loop2
  10. echo.
  11. echo loop2  循环等待 iexplore.exe 进程,如果出现就关闭之,并退出 loop2 循环
  12.                 timeout /t 5 /nobreak >nul
  13.                 FOR /F  "skip=1"  %%A IN ('tasklist /FI "IMAGENAME eq iexplore.exe" /FO CSV') do (
  14.                         taskkill /f /im iexplore.exe
  15.                         goto loop1
  16.                 )
  17.                 goto loop2
  18.         ) else (
  19.                 goto loop1
  20.         )

  21. )
复制代码




点评

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

使用道具 举报

3#
 楼主| 发表于 2016-7-19 13:26:06 | 只看该作者
dos时代菜鸟 发表于 2016-7-19 11:15
循环判断 系统进程中是否存在 001.exe 如果不存在就运行 002.exe ,10秒后关闭002进程,,循环间隔 10秒。

...

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

点评

这种 利用 cmd 实现 死循环,并在循环中调哟功能 外部命令 的cmd脚本,运行效率不高,本人不建议常驻内存。 如果非要如此,应该考虑编写 vbs 或者 powershell 或者 exe .  详情 回复 发表于 2016-7-19 14:17
回复

使用道具 举报

4#
发表于 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
回复

使用道具 举报

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

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

使用道具 举报

6#
发表于 2016-7-20 10:19:54 | 只看该作者
没看明白 ,
1.你是说,我那个 脚本一运行 就 消失了?没有发挥作用?
2.还是,脚本发挥了作用,你那个 不想要的 002 进程瞬间就关闭了?

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


点评

uc9
@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 (  详情 回复 发表于 2016-7-20 15:24
回复

使用道具 举报

7#
发表于 2016-7-20 11:03:06 来自手机 | 只看该作者
字体不是繁体,但措辞是繁体,我猜是港或台简体。
回复

使用道具 举报

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

使用道具 举报

9#
发表于 2016-7-20 16:50:47 | 只看该作者
每检查一次后,应  释放 %%a 清空变量的值,释放内存空间。
回复

使用道具 举报

10#
发表于 2016-7-20 17:22:24 来自手机 | 只看该作者
那你必须把汉字都改了,也得把措辞改对,比如信息必须改成資詢
回复

使用道具 举报

11#
发表于 2016-7-20 23:26:16 | 只看该作者
仅学过几天AU3,水平有限,简单编了个小工具,测试有效。

附件是编译好的,杀毒软件一般都会报毒(小a检测通过),特别是360(连bat都不放过,何况...),所以一定要添加例外,或者允许。
不放心可以自己下载au3安装编译。当然,这是能用的前提下。。。




  1. #include <Misc.au3>
  2. If _Singleton("test", 1) = 0 Then Exit

  3. #pragma compile(UPX, true)
  4. #pragma compile(Compression, 9)
  5. #pragma compile(FileDescription, "循环检测001.exe进程,然后操作002.exe")


  6. ;在运行里输入001.exe或002.exe能打开的,本程序才能正常工作
  7. ;否则请编辑环境变量Path,将001.exe和002.exe的目录添加进去就可以了


  8. While 1
  9.    If Not ProcessExists("001.exe") Then
  10.           ShellExecute("002.exe")
  11.           If ProcessExists("002.exe") Then
  12.                  Sleep(10000)
  13.                  ProcessClose("002.exe")
  14.           EndIf
  15.    EndIf
  16.    Sleep(10000)
  17. WEnd
复制代码




C001D002.7z (368.53 KB, 下载次数: 0)

点评

uc9
#include If _Singleton("test", 1) = 0 Then Exit #pragma compile(UPX, true) #pragma compile(Compression, 9) #pragma compile(FileDescription, "循环检测001.exe进程,然后操作002.exe") ;在运行  详情 回复 发表于 2016-7-21 06:52
回复

使用道具 举报

12#
发表于 2016-7-21 01:40:03 | 只看该作者
批处理,同样假设001.exe和002.exe能直接运行打开


  1. @echo off
  2. mode con: cols=30 lines=10
  3. echo CreateObject^("Shell.Application"^).ShellExecute "%~f0", "", "", "runas", 1 > "%temp%\getadmin.vbs"
  4. 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
  5. title C001D002
  6. color 2f

  7. echo.&echo.&echo.&echo.
  8. set /p=│          执行中...       │<nul

  9. :start
  10. wmic process where "name='002.exe'" get name 2>nul | find /i "002.exe" >nul 2>nul
  11. if %errorlevel%==0 (
  12.         timeout /t 10 /nobreak >nul 2>nul
  13.         taskkill /im 002.exe /f >nul 2>nul
  14. )

  15. wmic process where "name='001.exe'" get name 2>nul | find /i "001.exe" >nul 2>nul
  16. if not %errorlevel%==0 (
  17.         start 002.exe
  18.         call :002openwait
  19.         ) else (
  20.         timeout /t 10 /nobreak >nul 2>nul
  21.         goto start
  22. )

  23. :002openwait
  24. wmic process where "name='002.exe'" get name 2>nul | find /i "002.exe" >nul 2>nul
  25. if %errorlevel%==0 (
  26.         timeout /t 10 /nobreak >nul 2>nul
  27.         taskkill /im 002.exe /f >nul 2>nul
  28.         ) else (
  29.         goto 002openwait
  30. )
  31. timeout /t 10 /nobreak >nul 2>nul
  32. goto start
复制代码

点评

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

使用道具 举报

13#
 楼主| 发表于 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进程一次再重启,要如何修改

ps  001.exe进程需要用002.exe才能开启
回复

使用道具 举报

14#
 楼主| 发表于 2016-7-21 06:54:57 | 只看该作者
nttwqz 发表于 2016-7-21 01:40
批处理,同样假设001.exe和002.exe能直接运行打开

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

点评

如果有其它问题,请一并说清楚,因为我不知道你是怎么用的。我还怕打开批处理的时候002已经开启,所以开头加了检测等待结束以免重复运行,看来是多余了 你说的进程消失,是说的哪个进程,001?002?还是说我  详情 回复 发表于 2016-7-21 11:55
回复

使用道具 举报

15#
发表于 2016-7-21 11:55:18 来自手机 | 只看该作者
uc9 发表于 2016-7-21 06:54
用了你的批处理,以.bat执行
进程一闪就消失了
ps  001.exe进程需要用002.exe才能开启


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

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

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

点评

uc9
001因为有检测,需要用002开起过检测 因为001每30分钟还会检测一次 所以需要每运行30分再重启一次 002开启001有时候会失败 进程消失,是说的哪个进程------ 批处理消失 批处理以.bat执行,画面一闪就不见了  详情 回复 发表于 2016-7-21 12:56
回复

使用道具 举报

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

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


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

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

点评

两个人的批处理都一闪而过?! 不知道你是怎么另存为的,不要点击那个复制,手动选择复制,打开记事本,自动换行取消,另存为一定要选ASCII编码。 既然au3没问题,我在帮你实现重启001就可以了。 001应该怎  详情 回复 发表于 2016-7-21 18:25
回复

使用道具 举报

17#
发表于 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
感谢ntt大的回覆 启动002就会启动开启001 反正就是001不存在时 就开启002来启动001 001开启后就要关闭002 30分钟关闭001一次 叙述有点不好请原谅  详情 回复 发表于 2016-7-21 18:57
回复

使用道具 举报

18#
 楼主| 发表于 2016-7-21 18:57:11 | 只看该作者
nttwqz 发表于 2016-7-21 18:25
两个人的批处理都一闪而过?!

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

感谢ntt大的回覆

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

使用道具 举报

19#
发表于 2016-7-21 19:34:31 来自手机 | 只看该作者
002是启动001的,没有001就用002来启动它。30分钟要关闭一次001。
回复

使用道具 举报

20#
发表于 2016-7-22 14:06:23 | 只看该作者
uc9 发表于 2016-7-21 18:57
感谢ntt大的回覆

启动002就会启动开启001
  1. #include <Misc.au3>
  2. #include <Timers.au3>
  3. If _Singleton("test", 1) = 0 Then Exit

  4. #pragma compile(UPX, true)
  5. #pragma compile(Compression, 9)
  6. #pragma compile(FileDescription, "循环检测001.exe,然后操作002.exe,且每30分钟重启001.exe")

  7. Local $starttime, $nowtime, $endtime
  8. $starttime = _Timer_Init()

  9. While 1
  10.           $nowtime = Round(_Timer_Diff($starttime)/1000,2)
  11.           $endtime = $nowtime/1800
  12.           If ProcessExists("001.exe") And StringIsInt($endtime) Then
  13.                  ProcessClose("001.exe")
  14.           ElseIf Not ProcessExists("001.exe") Then
  15.                  ShellExecute("002.exe")
  16.                  If ProcessExists("002.exe") Then
  17.                         Sleep(10000)
  18.                         ProcessClose("002.exe")
  19.                  EndIf
  20.                  Sleep(10000)
  21.                  $nowtime -= 20
  22.           EndIf
  23. WEnd
复制代码

点评

uc9
刚刚测试计时不会和001同步 我设定5分自动重自 15/5开始15/10 自动重自 15/13手动关闭001自动重自后 15/15又自动重自 15/20自动重自 15/21手动关闭001自动重自后 15/25又自动重自 如果能15/21关闭001自动重  详情 回复 发表于 2016-7-22 16:01
回复

使用道具 举报

21#
发表于 2016-7-22 14:07:08 | 只看该作者
先试试,不晓得可用半小时可用否,计时可能会不准确或错误。
回复

使用道具 举报

22#
 楼主| 发表于 2016-7-22 16:01:14 | 只看该作者

刚刚测试计时不会和001同步
我设定5分自动重自
15/5开始15/10  自动重自
15/13手动关闭001自动重自后 15/15又自动重自

15/20自动重自
15/21手动关闭001自动重自后 15/25又自动重自
如果能15/21关闭001自动重自后15/26又自动重自更好
不过这样也可以用,反正知道用法就好
谢谢大家的帮忙

点评

你自己改成5分钟了? 获取进程运行时间目前无法做到,不过批处理我倒是知道 所以,我是从脚本开始计时的,并不是001的运行时间  详情 回复 发表于 2016-7-22 17:51
回复

使用道具 举报

23#
发表于 2016-7-22 17:51:00 来自手机 | 只看该作者
uc9 发表于 2016-7-22 16:01
刚刚测试计时不会和001同步
我设定5分自动重自
15/5开始15/10  自动重自

你自己改成5分钟了?

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

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

点评

uc9
改5分钟是测试用 我现在还是用第一次的版本 感谢 ntt大的帮忙  详情 回复 发表于 2016-7-22 20:06
回复

使用道具 举报

24#
 楼主| 发表于 2016-7-22 20:06:19 | 只看该作者
nttwqz 发表于 2016-7-22 17:51
你自己改成5分钟了?

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

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

使用道具 举报

25#
发表于 2016-9-5 14:11:18 | 只看该作者
为什么回复也要那么多字啊.........UR银盾uryindun.com
UR银盾钢化膜aiyanm.com












看帖是心情,回帖是道德
UR银盾uryindun.com
UR银盾钢化膜aiyanm.com
回复

使用道具 举报

26#
发表于 2016-9-12 14:10:06 | 只看该作者
相信楼主的说,非常支持你












民间捉鬼师,重庆民间道士
回复

使用道具 举报

27#
发表于 2019-10-5 19:45:43 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

28#
发表于 2021-5-18 22:44:48 | 只看该作者
请教各位大神们如何把USB和网卡的电源节能模式关掉做成批处理或者脚本
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-27 12:47

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表