Board logo

标题: [文件操作] [已解决]批处理监测指定程序是否在运行的代码查错及修改 [打印本页]

作者: mokio    时间: 2016-8-14 05:15     标题: [已解决]批处理监测指定程序是否在运行的代码查错及修改

本帖最后由 mokio 于 2016-8-15 10:10 编辑

我有如下代码,请教下,如何在启动程序后在后面写上启动的时间。现执行会出错[对 SETLOCAL 命令来说参数是无效的。
],请教如何修改此脚本,代码意义如下。谢谢!

输入参数
检测参数p是否为1或2
运行1.py 2.py 1.exe
检测1.exe是否存在
不存在,重新运行1.py 2.py 1.exe
  1. @Echo Off
  2. setlocal eidabledelayedexpaidsioid
  3. color E
  4. :start
  5. cd C:\Users\Administrator
  6. set /p id=房间号:
  7. set /p m=单线数量:
  8. set /p p=模式:
  9. cls
  10. if "%id%"=="q" goto quit  
  11. echo %p%|findstr /i "[1-2]">nul && goto go
  12. cls
  13. echo ==============
  14. echo 请输入正确模式!
  15. echo ==============
  16. echo.
  17. echo.
  18. echo 按任意键重新输入......
  19. pause>nul
  20. goto start
  21. :go
  22. start cmd /c 1.py
  23. start cmd /c 2.py
  24. ping /n 3 127.1>nul
  25. start "1x!m!-!id!" /low /miid cmd /c 1.exe -c !id! -t !m! -p !p!.txt -r 50
  26. echo ==============
  27. echo 代理已更新
  28. echo 主程序正在以最小化运行          《《———在这里加上程序启动时的时间
  29. echo ==============
  30. goto loop
  31. :loop
  32. TASKLIST|findstr /bc:"1.exe" ||
  33. echo ==============
  34. echo 检测到程序关闭 正在重启程序
  35. echo ==============
  36. goto go
  37. :quit
  38. exit
复制代码

作者: mokio    时间: 2016-8-14 12:04

感谢修改标题(。・ω・。)ノ♡
作者: Batcher    时间: 2016-8-14 13:45

  1. setlocal enabledelayedexpansion
复制代码
  1. echo 主程序正在以最小化运行 %date% %time%
复制代码

作者: pcl_test    时间: 2016-8-14 13:46

本帖最后由 pcl_test 于 2016-8-14 14:00 编辑

rem setlocal enabledelayedexpansion  //并不需要开延迟,对应1.exe的参数无需用!!延迟扩展
……
:start
cls
……
if /i "%id%"=="q" goto quit  
echo,%p%|findstr "^[12]$">nul&&goto go
……
start "1x%m%-%id%" /low /min cmd /c 1.exe -c %id% -t %m% -p %p%.txt -r 50
……
echo 主程序正在以最小化运行  %date%%time%
……
:loop
>nul ping -n 2 0
TASKLIST|find "1.exe">nul&&goto loop||(
echo ==============
echo 检测到程序关闭 正在重启程序
echo ==============
)
goto go
作者: mokio    时间: 2016-8-14 15:31

本帖最后由 mokio 于 2016-8-15 09:33 编辑

回复 4# pcl_test
谢谢版主的回复!代码成功运行了!!
但是现在遇到了新问题
在运行2.py的时候是会生成一个2.txt文件 但是他有时候不太稳定 如果2.txt文件大小小于5kb的话是不正常的

可否在运行2.py后 1.exe前 加一个“2.txt是否小于5k b”
如果是,则重新运行2.py
如果不是,就继续运行1.exe

如果可以的话,再生成一个日志。把显示的话生成一个日志文件

刚才自己有试着加了下参考了如下代码 一脸懵逼 不知道怎么加进去
  1. /*&cls
  2. @echo off
  3. set "file=C:\1.ini"
  4. cscript -nologo -e:jscript "%~f0" "%file%"|find /i "Y">nul&&echo;执行A操作||echo;执行B操作
  5. pause&exit
  6. */
  7. var n = 50, fso = new ActiveXObject('Scripting.Filesystemobject');
  8. if(fso.GetFile(WSH.Arguments(0)).Size > n)WSH.echo('Y')
复制代码

作者: Batcher    时间: 2016-8-15 20:49

回复 5# mokio


BAT的for命令本身可以获取文件大小,没有必要调用JS代码。
  1. @echo off
  2. for %%i in ("2.txt") do (
  3.     if %%~zi lss 5210 (
  4.         echo 重新运行2.py
  5.     ) else (
  6.         echo 继续运行1.exe
  7.     )
  8. )
  9. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2