[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] (已解决)bat脚本中如何显示正在运行的程序数量?

本帖最后由 xfgc 于 2024-4-25 15:49 编辑

各位大佬们,想咨询一下,bat是否能实现如下功能,1.计算正在运行的特定程序的数量;2.当运行程序的数量小于某一值(比如 40 )时,自动运行下一个程序,直到满足运行程序的数量为40
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. call fds
  4. set filnavn1=1.fds
  5. set mappenavn1="1"
  6. set path1=%mappenavn1%
  7. set filnavn2=2.fds
  8. set mappenavn2="2"
  9. set path2=%mappenavn2%
  10. set filnavn3=3.fds
  11. set mappenavn3="3"
  12. set path3=%mappenavn3%
  13. set filnavn4=4.fds
  14. set mappenavn4="4"
  15. set path4=%mappenavn4%
  16. if not exist "%path1%" mkdir %path1%
  17. copy %filnavn1% %path1%
  18. if not exist "%path2%" mkdir %path2%
  19. copy %filnavn2% %path2%
  20. if not exist "%path3%" mkdir %path3%
  21. copy %filnavn3% %path3%
  22. if not exist "%path4%" mkdir %path4%
  23. copy %filnavn4% %path4%
  24. cd %mappenavn1%
  25. start cmd /k call fds_local -p 4 %filnavn1%
  26. cd..
  27. cd %mappenavn2%
  28. start cmd /k call fds_local -p 4 %filnavn2%
  29. cd..
  30. rem 定义包含 fds 文件的文件夹列表
  31. set "folders=Folder1 Folder2 Folder3 Folder4"
  32. REM 设置特定程序名称
  33. set program_name=fds.exe
  34. REM 设置计数器
  35. set /a count=0
  36. REM 遍历 tasklist 输出的每一行
  37. for /f "skip=3 tokens=1" %%a in ('tasklist ^| findstr /i /c:"%program_name%"') do (
  38.     REM 如果行不为空,则增加计数器
  39.     if not "%%a"=="" (
  40.         set /a count+=1
  41.     )
  42. )
  43. REM 如果特定程序的数量小于8,则启动下一个程序
  44. if %count% LSS 8 (
  45. rem 获取下一个未运行的 fds 文件
  46.     for %%i in (%folders%) do (
  47.         cd "%%i"
  48.         for %%j in (%fds_files%) do (
  49.             tasklist  | findstr /i "fds.exe" > nul
  50.             if errorlevel 1 (
  51.                 rem 启动下一个 fds 文件任务
  52.                 start cmd /c call fds_local -p 4 %%i.fds
  53.                 goto :next_file
  54.             )
  55.         )
  56.         cd ..
  57.     )
  58. )
  59. :next_file
  60. rem 等待一段时间后继续检查
  61. timeout /t 5
  62. goto start
  63. rem 如果没有正在运行的 fds,则显示 "All simulations completed." 并暂停脚本
  64. echo All simulations completed.
  65. pause
  66. exit
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

请直接完整描述下需求,像顶楼的两点,我觉得ai也没必要写86行吧...
1

评分人数

    • xfgc: 非常强,十分感谢技术 + 1
bat小白,请多指教!谢谢!

TOP

回复 1# xfgc


能否举例说明这段代码跟你的需求之间有什么关联或者差距?
如果需要上传文件,请用使用网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# 77七
想要实现的功能放在了百度网盘里面,恳请各位大佬赐教,纯小白,上面的代码都是一点一点搜出来写的
链接:https://pan.baidu.com/s/13la4gk2MY8PDnl_Xjo6gAA?pwd=1234
提取码:1234

TOP

回复 3# Batcher
感谢您提供的上传方法,想要实现的功能放在了百度网盘里面,恳请各位大佬赐教,纯小白,上面的代码都是一点一点搜出来写的
链接:https://pan.baidu.com/s/13la4gk2MY8PDnl_Xjo6gAA?pwd=1234
提取码:1234

TOP

回复 4# xfgc


  
  1. @echo off
  2. cd /d "%~dp0"
  3. :loop
  4. for /f %%a in ('tasklist ^|find /i /c "fds.exe"') do (
  5. if %%a lss 40 (
  6. call :1
  7. ) else (
  8. timeout 5 >nul
  9. goto :loop
  10. )
  11. )
  12. if not defined m (
  13. echo All simulations completed.
  14. pause
  15. exit
  16. ) else (
  17. timeout 1 >nul
  18. goto :loop
  19. )
  20. :1
  21. set m=
  22. for /r %%i in (*.fds) do (
  23. if not defined _"%%i" (
  24. set _"%%i"=1
  25. set m=1
  26. start cmd /k call fds_local -p 4 "%%i"
  27. exit /b
  28. )
  29. )
  30. exit /b
复制代码
bat小白,请多指教!谢谢!

TOP

本帖最后由 aloha20200628 于 2024-4-25 15:45 编辑


“...目前想要实现的功能是,我需要跑50个fds.exe文件,假设我的电脑有40核,我只能同时跑10个fds.exe文件,希望通过这个代码可以实现这50个fds.exe文件自动跑完:当每次运行的10个fds.exe文件中的其中1个运行结束之后,后面的fds.exe文件可以自动运行,保证一直都是10个fds.exe文件在跑,直到50个全部跑完...”

以下代码根据以上条件和要求。代码存为test.bat,放到fds.exe文件所在目录运行

  1. @echo off &setlocal enabledelayedexpansion
  2. set/a "n=0,k=0"
  3. :[loop]
  4. if !k! lss 10 (start "" fds.exe &set/a "n+=1")
  5. if !n! geq 50 goto[end]
  6. timeout /t 5
  7. for /f %%k in (' tasklist^|find /c /i "fds.exe" ') do set "k=%%k"
  8. goto[loop]
  9. :[end]
  10. echo,All simulations completed
  11. exit/b
复制代码

TOP

回复 6# 77七
十分感谢大佬,该问题已经差不多被解决了,现在只有一个小问题,就是 fds.exe运行的时候是在根目录运行,不是在单独的文件夹里面运行,因为一个fds文件运行产生的其他文件非常多,希望能实现fds文件在各自的文件夹中运行。再次感谢您解决了我的难题。以下是bat代码的说明和示例:
链接:https://pan.baidu.com/s/1Itw47oPJ0WaF8evCpW4BNA?pwd=1234
提取码:1234

TOP

回复 7# aloha20200628
感谢您的回复,目前问题已经差不多被解决了,现在只有一个小问题,就是 fds.exe运行的时候是在根目录运行,不是在单独的文件夹里面运行,因为一个fds文件运行产生的其他文件非常多,希望能实现fds文件在各自的文件夹中运行。再次感谢您的帮助。以下是bat代码的说明和示例:
链接:https://pan.baidu.com/s/1Itw47oPJ0WaF8evCpW4BNA?pwd=1234
提取码:1234

TOP

回复 8# xfgc


    修改第21-31行为:
  1. :1
  2. set m=
  3. for /r %%i in (*.fds) do (
  4. if not defined _"%%i" (
  5. set _"%%i"=1
  6. set m=1
  7. md "%%~ni"
  8. pushd "%%~ni"
  9. start cmd /k call fds_local -p 4 "%%i"
  10. popd
  11. exit /b
  12. )
  13. )
  14. exit /b
复制代码

bat小白,请多指教!谢谢!

TOP

回复 10# 77七
非常非常感谢大佬,问题已经完全解决!!!

TOP

返回列表