标题: [文本处理] (已解决)bat脚本中如何显示正在运行的程序数量? [打印本页]
作者: xfgc 时间: 2024-4-23 17:33 标题: (已解决)bat脚本中如何显示正在运行的程序数量?
本帖最后由 xfgc 于 2024-4-25 15:49 编辑
各位大佬们,想咨询一下,bat是否能实现如下功能,1.计算正在运行的特定程序的数量;2.当运行程序的数量小于某一值(比如 40 )时,自动运行下一个程序,直到满足运行程序的数量为40- @echo off
- setlocal enabledelayedexpansion
-
- call fds
-
- set filnavn1=1.fds
- set mappenavn1="1"
- set path1=%mappenavn1%
-
- set filnavn2=2.fds
- set mappenavn2="2"
- set path2=%mappenavn2%
-
- set filnavn3=3.fds
- set mappenavn3="3"
- set path3=%mappenavn3%
-
- set filnavn4=4.fds
- set mappenavn4="4"
- set path4=%mappenavn4%
-
-
- if not exist "%path1%" mkdir %path1%
- copy %filnavn1% %path1%
-
- if not exist "%path2%" mkdir %path2%
- copy %filnavn2% %path2%
-
- if not exist "%path3%" mkdir %path3%
- copy %filnavn3% %path3%
-
- if not exist "%path4%" mkdir %path4%
- copy %filnavn4% %path4%
-
- cd %mappenavn1%
- start cmd /k call fds_local -p 4 %filnavn1%
- cd..
-
- cd %mappenavn2%
- start cmd /k call fds_local -p 4 %filnavn2%
- cd..
-
- rem 定义包含 fds 文件的文件夹列表
- set "folders=Folder1 Folder2 Folder3 Folder4"
-
- REM 设置特定程序名称
- set program_name=fds.exe
-
- REM 设置计数器
- set /a count=0
-
- REM 遍历 tasklist 输出的每一行
- for /f "skip=3 tokens=1" %%a in ('tasklist ^| findstr /i /c:"%program_name%"') do (
- REM 如果行不为空,则增加计数器
- if not "%%a"=="" (
- set /a count+=1
- )
- )
-
- REM 如果特定程序的数量小于8,则启动下一个程序
- if %count% LSS 8 (
- rem 获取下一个未运行的 fds 文件
- for %%i in (%folders%) do (
- cd "%%i"
- for %%j in (%fds_files%) do (
- tasklist | findstr /i "fds.exe" > nul
- if errorlevel 1 (
- rem 启动下一个 fds 文件任务
- start cmd /c call fds_local -p 4 %%i.fds
- goto :next_file
- )
- )
- cd ..
- )
- )
-
-
- :next_file
- rem 等待一段时间后继续检查
- timeout /t 5
- goto start
-
- rem 如果没有正在运行的 fds,则显示 "All simulations completed." 并暂停脚本
- echo All simulations completed.
- pause
- exit
复制代码
作者: 77七 时间: 2024-4-23 22:00
请直接完整描述下需求,像顶楼的两点,我觉得ai也没必要写86行吧...
作者: Batcher 时间: 2024-4-24 08:28
回复 1# xfgc
能否举例说明这段代码跟你的需求之间有什么关联或者差距?
如果需要上传文件,请用使用网盘。
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: xfgc 时间: 2024-4-24 17:40
回复 2# 77七
想要实现的功能放在了百度网盘里面,恳请各位大佬赐教,纯小白,上面的代码都是一点一点搜出来写的
链接:https://pan.baidu.com/s/13la4gk2MY8PDnl_Xjo6gAA?pwd=1234
提取码:1234
作者: xfgc 时间: 2024-4-24 17:41
回复 3# Batcher
感谢您提供的上传方法,想要实现的功能放在了百度网盘里面,恳请各位大佬赐教,纯小白,上面的代码都是一点一点搜出来写的
链接:https://pan.baidu.com/s/13la4gk2MY8PDnl_Xjo6gAA?pwd=1234
提取码:1234
作者: 77七 时间: 2024-4-24 18:27
回复 4# xfgc
- @echo off
- cd /d "%~dp0"
- :loop
- for /f %%a in ('tasklist ^|find /i /c "fds.exe"') do (
- if %%a lss 40 (
- call :1
- ) else (
- timeout 5 >nul
- goto :loop
- )
- )
- if not defined m (
- echo All simulations completed.
- pause
- exit
- ) else (
- timeout 1 >nul
- goto :loop
- )
-
- :1
- set m=
- for /r %%i in (*.fds) do (
- if not defined _"%%i" (
- set _"%%i"=1
- set m=1
- start cmd /k call fds_local -p 4 "%%i"
- exit /b
- )
- )
- exit /b
复制代码
作者: aloha20200628 时间: 2024-4-24 19:36
本帖最后由 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文件所在目录运行
- @echo off &setlocal enabledelayedexpansion
- set/a "n=0,k=0"
- :[loop]
- if !k! lss 10 (start "" fds.exe &set/a "n+=1")
- if !n! geq 50 goto[end]
- timeout /t 5
- for /f %%k in (' tasklist^|find /c /i "fds.exe" ') do set "k=%%k"
- goto[loop]
- :[end]
- echo,All simulations completed
- exit/b
复制代码
作者: xfgc 时间: 2024-4-25 14:50
回复 6# 77七
十分感谢大佬,该问题已经差不多被解决了,现在只有一个小问题,就是 fds.exe运行的时候是在根目录运行,不是在单独的文件夹里面运行,因为一个fds文件运行产生的其他文件非常多,希望能实现fds文件在各自的文件夹中运行。再次感谢您解决了我的难题。以下是bat代码的说明和示例:
链接:https://pan.baidu.com/s/1Itw47oPJ0WaF8evCpW4BNA?pwd=1234
提取码:1234
作者: xfgc 时间: 2024-4-25 14:51
回复 7# aloha20200628
感谢您的回复,目前问题已经差不多被解决了,现在只有一个小问题,就是 fds.exe运行的时候是在根目录运行,不是在单独的文件夹里面运行,因为一个fds文件运行产生的其他文件非常多,希望能实现fds文件在各自的文件夹中运行。再次感谢您的帮助。以下是bat代码的说明和示例:
链接:https://pan.baidu.com/s/1Itw47oPJ0WaF8evCpW4BNA?pwd=1234
提取码:1234
作者: 77七 时间: 2024-4-25 15:27
回复 8# xfgc
修改第21-31行为:
- :1
- set m=
- for /r %%i in (*.fds) do (
- if not defined _"%%i" (
- set _"%%i"=1
- set m=1
- md "%%~ni"
- pushd "%%~ni"
- start cmd /k call fds_local -p 4 "%%i"
- popd
- exit /b
- )
- )
- exit /b
复制代码
作者: xfgc 时间: 2024-4-25 15:43
回复 10# 77七
非常非常感谢大佬,问题已经完全解决!!!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |