Board logo

标题: [文本处理] [已解决]批处理循环调用 [打印本页]

作者: aipca    时间: 2015-2-7 13:12     标题: [已解决]批处理循环调用

本帖最后由 aipca 于 2015-2-7 19:35 编辑

我有个文本1.txt

内容如下:
  1. start /d 1.exe
  2. start /d 2.exe
  3. start /d 3.exe
  4. start /d 4.exe
  5. start /d 5.exe
  6. start /d 6.exe
  7. start /d 7.exe
  8. start /d 8.exe
  9. start /d 9.exe
  10. start /d 10.exe
  11. start /d 11.exe
  12. start /d 12.exe
  13. start /d 13.exe
  14. start /d 14.exe
  15. start /d 15.exe
  16. start /d 16.exe
  17. start /d 17.exe
  18. start /d 18.exe
  19. start /d 19.exe
  20. start /d 20.exe
  21. start /d 21.exe
  22. start /d 22.exe
  23. start /d 23.exe
  24. start /d 24.exe
  25. start /d 25.exe
  26. start /d 26.exe
  27. start /d 27.exe
  28. start /d 28.exe
  29. start /d 29.exe
  30. start /d 30.exe
  31. start /d 31.exe
  32. start /d 32.exe
  33. start /d 33.exe
  34. start /d 34.exe
  35. start /d 35.exe
  36. start /d 36.exe
  37. start /d 37.exe
  38. start /d 38.exe
  39. start /d 39.exe
  40. start /d 40.exe
  41. start /d 41.exe
  42. start /d 42.exe
  43. start /d 43.exe
  44. start /d 44.exe
  45. start /d 45.exe
  46. start /d 46.exe
  47. start /d 47.exe
  48. start /d 48.exe
  49. start /d 49.exe
  50. start /d 50.exe
  51. start /d 51.exe
  52. start /d 52.exe
  53. start /d 53.exe
  54. start /d 54.exe
  55. start /d 55.exe
  56. start /d 56.exe
  57. start /d 57.exe
  58. start /d 58.exe
  59. start /d 59.exe
  60. start /d 60.exe
  61. start /d 61.exe
  62. start /d 62.exe
  63. start /d 63.exe
  64. start /d 64.exe
  65. start /d 65.exe
  66. start /d 66.exe
  67. start /d 67.exe
  68. start /d 68.exe
  69. start /d 69.exe
  70. start /d 70.exe
  71. start /d 71.exe
  72. start /d 72.exe
  73. start /d 73.exe
  74. start /d 74.exe
  75. start /d 75.exe
  76. start /d 76.exe
  77. start /d 77.exe
  78. start /d 78.exe
  79. start /d 79.exe
  80. start /d 80.exe
  81. start /d 81.exe
  82. start /d 82.exe
  83. start /d 83.exe
  84. start /d 84.exe
  85. start /d 85.exe
  86. start /d 86.exe
  87. start /d 87.exe
  88. start /d 88.exe
  89. start /d 89.exe
  90. start /d 90.exe
  91. start /d 91.exe
  92. start /d 92.exe
  93. start /d 93.exe
  94. start /d 94.exe
  95. start /d 95.exe
  96. start /d 96.exe
  97. start /d 97.exe
  98. start /d 98.exe
  99. start /d 99.exe
  100. 更多
  101. start /ad …….exe
复制代码
我用批处理每次选9行执行 然后十分钟以后 在调用下一个9行 以此类推 至到文本结束。

我现在用的方法是 用批处理将这文本里面的内容 提取出来 生存N个临时的BAT文件 然后每隔十分钟轮着按序CALL这些临时批处理文件,这样造成批处理文件太冗长 有没有办法 用一些简单的语句让批处理 自动去循环执行呢?
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=1,* delims=="  %%a in ('find "lin="^<config.ini') do (set kk=%%b)
  3. set filenames=0
  4. set filename=1
  5. set numbers=0
  6. md %cd%\temp >nul 2>&1
  7. for /f "delims=" %%a in (%CD%\1.txt) do (
  8.         set /a numbers+=1
  9.         set /a filenames+=1
  10.         echo %%a>>temp\!filename!.bat
  11.         if !numbers! geq %kk% (
  12.                 set /a filename+=1
  13.                 set numbers=0
  14.                 )
  15. )
  16. SET wait=ping -n 2 127.0.0.1 ^>^nul
  17. for /l %%n in (3,-1,0) do (
  18. rem cls
  19. echo.
  20. echo.
  21. echo.
  22. echo.
  23. echo.
  24. echo.
  25. echo                 **************************************
  26. echo.
  27. echo                             %%n 秒开始执行第1组...
  28. echo.
  29. echo                 **************************************
  30. %wait%
  31. cls
  32.    )
  33. if exist temp\1.bat (call temp\1.bat) else (goto other)
  34. SET wait=ping -n 2 127.0.0.1 ^>^nul
  35. for /l %%n in (600,-1,0) do (
  36. rem cls
  37. echo.
  38. echo.
  39. echo.
  40. echo.
  41. echo.
  42. echo.
  43. echo                 **************************************
  44. echo.
  45. echo                                  %%n 秒开始执行第2组...
  46. echo.
  47. echo                 **************************************
  48. %wait%
  49. cls
  50.    )
  51. if exist temp\2.bat (call temp\2.bat) else (goto other)
  52. :other
  53. cls
  54. echo.
  55. echo.
  56. echo.
  57. echo.
  58. echo.
  59. echo                 **************************************
  60. echo.
  61. echo                                     执行已全部完成
  62. echo.
  63. echo                                     请按任意键退出
  64. echo.
  65. echo                 **************************************
  66. del temp\*.bat
  67. pause >nul
  68. exit
复制代码
config.ini 是我配置的文件 设置了一次执行几条的变量数。如果按这种方式 假设我有99条的话 就要写11条的命令 如果更多的话 就要写更多的。

觉得这种办法太笨了 是不是有更方便的方法 来解决这个问题的?
作者: 凡凡之呗    时间: 2015-2-7 15:03

回复 1# aipca


    你是怎么样控制时间的
作者: aipca    时间: 2015-2-7 15:28

回复 2# 凡凡之呗


    for /l %%n in (600,-1,0) do (%wait%)
作者: pcl_test    时间: 2015-2-7 16:50

回复 1# aipca
  1. @echo off&setlocal enabledelayedexpansion
  2. cd .>temp.bat
  3. set n=0
  4. for /f "delims=" %%i in (1.txt) do (
  5. if "!n!" neq "8" (
  6. echo %%i>>temp.bat
  7. set /a n+=1
  8. ) else (
  9. echo %%i>>temp.bat
  10. set n=0
  11. call temp.bat
  12. for /l %%a in (600,-1,0) do (
  13. cls
  14. echo 倒数%%a秒后运行下一批程序!请稍等。。。
  15. ping 127.1 -n 2 >nul
  16. )
  17. cd .>temp.bat
  18. )
  19. )
  20. pause
复制代码

作者: aipca    时间: 2015-2-7 19:25

回复 4# pcl_test


    THX 非常棒 一下子把我的问题给解决了
作者: pcl_test    时间: 2015-2-7 19:30

回复 5# aipca


如果问题解决,请在标题最前面标上[已解决]
作者: aipca    时间: 2015-2-7 19:35

回复 6# pcl_test


    OK 在次感谢
作者: aipca    时间: 2015-2-8 12:19

回复 4# pcl_test


    追问一下 如何体现出 目前是运行了第几组呢?这样方便查询查看进度
作者: pcl_test    时间: 2015-2-8 12:36

回复 8# aipca
  1. @echo off&setlocal enabledelayedexpansion
  2. cd .>temp.bat
  3. set n=0
  4. set m=0
  5. for /f "delims=" %%i in (1.txt) do (
  6. if "!n!" neq "8" (
  7. echo %%i>>temp.bat
  8. set /a n+=1
  9. ) else (
  10. echo %%i>>temp.bat
  11. set n=0
  12. call temp.bat
  13. set /a m+=1
  14. for /l %%a in (600,-1,0) do (
  15. cls
  16. echo 第!m!组程序已执行完毕。。。
  17. echo 倒数%%a秒后将执行下一组程序!请稍等。。。
  18. ping 127.1 -n 2 >nul
  19. )
  20. cd .>temp.bat
  21. )
  22. )
  23. pause
复制代码

作者: aipca    时间: 2015-2-8 13:04

回复 9# pcl_test


    THX
作者: aipca    时间: 2015-2-11 16:49

回复 9# pcl_test


    发现一个问题

如果1.txt里面行数 不是9的倍数(或不满9) 最后一轮 它不执行 。这要怎么解决?
作者: pcl_test    时间: 2015-2-11 17:11

回复 11# aipca

最后一行的pause前面插入一行call temp.bat
  1. call temp.bat
  2. pause
复制代码

作者: aipca    时间: 2015-2-11 17:22

回复 12# pcl_test


    原来是这样 太谢谢了




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