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

[文本处理] 批处理命令for循环嵌套如何读取文件中的进程名做对比?

我想实现这样的功能,一个文本game.txt,里面列取了一些进程的名字比如(qq.exe...)
然后我用
tasklist > task.txt
for /f "tokens=1 delims= " %%i in (task.txt) do echo %%i >> task1.txt
在用for 把命令取出来放到文本task1.txt里,然后我要从game.txt里一条一条的跟task1.txt做对比,如果相同则执行相应的操作
这是不是涉及for循环嵌套啊,到这我就不会了,如果各位有更好的思路请指教

task1.txt里面内容如下
System
System
smss.exe
csrss.exe
winlogon.exe
services.exe
lsass.exe
svchost.exe
svchost.exe
MsMpEng.exe
svchost.exe
svchost.exe
explorer.exe
svchost.exe
svchost.exe
ZhuDongFangYu.exe
spoolsv.exe
svchost.exe
alg.exe
msseces.exe
360Tray.exe
ctfmon.exe
cmd.exe
conime.exe
notepad.exe
Maxthon.exe
sogouflash.exe
taskmgr.exe
tasklist.exe
wmiprvse.exe

GAME.TXT里面的内容呢

TOP

本帖最后由 ivor 于 2012-1-8 23:40 编辑
  1. @echo on
  2. for /f %%i in ('tasklist ^| findstr /v "映" ^| findstr /v "="') do (
  3.         for /f %%a in (game.txt) do (
  4.                 if %%a EQU %%i taskkill /f /im "%%i"
  5.         )
  6. )
  7. ::game.txt中是要关闭的程序名称,记得加程序后缀。
  8. pause
复制代码

TOP

谢谢 3楼的回答,已经实现了我的功能,我用这个来限制小孩子玩游戏哈哈

TOP

本帖最后由 ivor 于 2012-1-9 16:14 编辑
  1. @echo off
  2. :start
  3. for /f "tokens=1 delims=," %%i in ('tasklist /fo csv ^| findstr /v "映"') do (
  4.         for /f "delims=" %%a in (game.txt) do (
  5.                 if %%a EQU %%~i taskkill /f /im "%%~i" & goto start
  6.         )
  7. )
复制代码
game.txt中是要关闭的程序名称,记得加程序后缀。
1.优化程序多开后浪费系统资源结束不存在进程的问题,添加goto start
2.优化程序名称存在空格问题

TOP

说点体外话,论坛很好,就是网通的用户访问太卡了,昨天硬是没回复上去

ivor太细心了,我直接跳出去然后执行计时部分到时间后直接关机了
这是我的完整代码,水平有限见笑了
开机的时候运行qidong.bat,如果时间间隔大于30分钟,跳入nogame部分,每隔一段时间检测进程是否存在游戏进程,如果有则开始计时,30分钟后,开始执行关机操作并且写入结束时的时间日期,配合开机qidong.bat,防止重新启动后再玩

nogame.bat 部分
  1. @echo off
  2. ::判断进程内是否含有game.txt里面的进程,如果有进入over
  3. :loop
  4. for /f "tokens=1 delims=," %%i in ('tasklist /fo csv ^| findstr /v "映"') do (
  5.         for /f "delims=" %%a in (game.txt) do (
  6.                 if %%a EQU %%~i  goto over
  7.         )
  8. )
  9. ::判断进程内是否含有game.txt里面的进程,如果有进入over
  10. ping -n 1 -w 300000 127.255.255.255
  11. goto loop
  12. :over
  13. ::开始计时,指定时间后进行操作
  14. ping -n 1 -w 1800000 127.255.255.255
  15. setlocal enabledelayedexpansion
  16. set a=%time:~3,2%
  17. set b=%time:~,2%
  18. set /a nowtime=%a%+%b%*60
  19. echo %nowtime% > shijian.txt
  20. set c=%date:~,10%
  21. echo %c% > riqi.txt
  22. shutdown -s -t 10
  23. echo 10秒后关机
  24. pause
复制代码
启动检测部分qidong.bat
  1. @echo off
  2. set a=%date:~,10%
  3. for /f "tokens=*" %%b in (riqi.txt) do ( set c=%%b)
  4. if %a%==%c% (goto shijian) else (goto nogame)
  5. :shijian
  6. rem 时间判断,上次时间超过1个小时,可以继续玩游戏,否则退出,关机
  7. setlocal enabledelayedexpansion
  8. set d=%time:~3,2%
  9. set e=%time:~,2%
  10. set /a nowtime=%d%+%e%*60
  11. for /f "tokens=*" %%f in (shijian.txt) do (set lasttime=%%f)
  12. set /a h=%nowtime%-%lasttime%
  13. if %h% gtr 30 ( GOTO NOGAME) else ( goto shut)
  14. :NOGAME
  15. NOGAME.BAT
  16. :shut
  17. echo 2次玩游戏间隔必须在30分钟以上,10秒后系统关机
  18. ping -n 1 -w 5000 127.255.255.255
  19. shutdown -s -t 10
  20. exit
复制代码

TOP

返回列表