Board logo

标题: [文本处理] [已解决]求随机或顺序从文本中依次取10个变量的处理方法 [打印本页]

作者: thp2008    时间: 2021-3-31 11:11     标题: [已解决]求随机或顺序从文本中依次取10个变量的处理方法

本帖最后由 thp2008 于 2021-3-31 14:05 编辑

我有个批处理,就是每隔20秒,就从List.txt中,读取一行网址,打开它。但是List.txt中的数量相当大,这个批处理,会从头打开到结束,现在,我想控制一下,每次,只想随机或顺序取其中的10个,做为变量打开它,应该如何实现。

(如果随机不好处理的话,也可以顺序的方式,比如先打开1--10(每个网页间隔20秒);每组间隔10分钟,TIMEOUT /T 600 /NOBREAK,第二组打开11-20,如此循环,只到完成,最后如果不够10个,剩几个就打开几个。)
在下一组打开前,结束前一组
  1. taskkill /FI "imagename eq chrome*" /f
复制代码
  1. echo 每20秒打开一个网页
  2. for /f "delims=" %%A in (List.txt)  do  (
  3. chrome.exe "%%A"
  4. echo chrome.exe "%%A"
  5. TIMEOUT /T 20 /NOBREAK
  6. )
复制代码

作者: went    时间: 2021-3-31 11:31

  1. @echo off & cd /d "%~dp0"
  2. setlocal enabledelayedexpansion
  3. set "n=0"
  4. for /f "delims=" %%i in (List.txt) do (
  5. echo chrome.exe "%%i"
  6. set /a "n+=1"
  7. if !n! lss 10 (
  8. REM 暂停20秒
  9. timeout /t 20 /nobreak
  10. ) else (
  11. REM 暂停10分钟
  12. timeout /t 600 /nobreak
  13. REM 结束chrome
  14. taskkill /FI "imagename eq chrome*" /f
  15. set "n=0"
  16. )
  17. )
  18. pause&exit
复制代码

作者: thp2008    时间: 2021-3-31 11:38

回复 2# went

大佬,你这个写的很好,感谢您的帮助,但是,有一点小细节,就是

for /f "delims=" %%i in (List.txt) do (
        echo chrome.exe "%%i"

应该是先执行一次,chrome.exe "%%i",再echo chrome.exe "%%i".这里漏了,变成只显示了。应该怎样加一条chrome.exe "%%i",麻烦了。
作者: went    时间: 2021-3-31 11:40

chrome.exe "%%i"
echo chrome.exe "%%i"
作者: thp2008    时间: 2021-3-31 11:48

回复 4# went
哦,直接加上就好了,感谢!
我先来测试一下,配合一下,我的刷新脚本,我来试试先。
作者: thp2008    时间: 2021-3-31 12:04

回复 2# went


    老大,我测试了一下,测试了几次,这个顺序变量
第一组10个打开没有问题,结束,也没有问题。
第二组打开第1个后,就停了,不动了。不知道是怎么会事。我重试了几次,都这样。我把ECHO ON打开,也试了,没有报错,只是不动了。
这是什么原因。
作者: went    时间: 2021-3-31 12:12

回复 6# thp2008


    截图
作者: thp2008    时间: 2021-3-31 12:15

等待  0 秒,按 CTRL+C 退出 ...
成功: 已终止进程 "chrome.exe",其 PID 为 1740。
成功: 已终止进程 "chrome.exe",其 PID 为 9468。
成功: 已终止进程 "chrome.exe",其 PID 为 3728。
错误: 无法终止进程 "chrome.exe",其 PID 为 1764。
原因: 没有此任务的实例在运行。
成功: 已终止进程 "chrome.exe",其 PID 为 11736。
成功: 已终止进程 "chrome.exe",其 PID 为 11936。
错误: 无法终止进程 "chrome.exe",其 PID 为 13728。
原因: 没有此任务的实例在运行。
成功: 已终止进程 "chrome.exe",其 PID 为 13340。
成功: 已终止进程 "chrome.exe",其 PID 为 6156。
成功: 已终止进程 "chrome.exe",其 PID 为 9856。
成功: 已终止进程 "chrome.exe",其 PID 为 476。
成功: 已终止进程 "chrome.exe",其 PID 为 1268。
成功: 已终止进程 "chrome.exe",其 PID 为 14584。
成功: 已终止进程 "chrome.exe",其 PID 为 14024。
成功: 已终止进程 "chrome.exe",其 PID 为 1936。
成功: 已终止进程 "chrome.exe",其 PID 为 7440。
成功: 已终止进程 "chrome.exe",其 PID 为 12460。
成功: 已终止进程 "chrome.exe",其 PID 为 9772。
错误: 无法终止进程 "chrome.exe",其 PID 为 6748。
原因: 没有此任务的实例在运行。
成功: 已终止进程 "chrome.exe",其 PID 为 15084。

E:\PLDown>(
chrome.exe "https://www.baidu.com/"
echo chrome.exe "https://www.baidu.com/"
set /a "n+=1"
if !n! LSS 10 (
REM 暂停20秒
timeout /t 10 /nobreak
)  else (
REM 暂停10分钟
timeout /t 60 /nobreak
REM 结束chrome
taskkill /im "chrome.exe" /f
set "n=0"
)
)
作者: thp2008    时间: 2021-3-31 12:16

就停在这里不动了,我运行了几次都这样,截图超过50K,不行。
作者: thp2008    时间: 2021-3-31 12:17

第11个打开后,就不动了,第12次就不行了。
作者: went    时间: 2021-3-31 12:29

测试正常,我也不知道怎么回事
作者: thp2008    时间: 2021-3-31 12:55

本帖最后由 thp2008 于 2021-3-31 13:11 编辑

我试出来了,原来是从第二组开始,每打开一个,就要关掉这个浏览器,才能再打开下一个。不关掉,就一直停在那里,不出现倒计时,只要一关掉,就会出现倒计时,然后又打开下一个了。后面的全是这样,我一直关,就一直出现倒计时,一直打开,只要我不关浏览器了,就不打开了,停在那,不动了。
然后,有时候,我一运行这个批处理,打开第一个,就不动了,也是要关掉浏览器之后,才能继续,退出,重试几次,又可以出现倒计时,自动打开10个了,到11个后就不动了,要关浏览器,感觉像是批处理不稳定的样子。怎么会有这种情况。这是怎么会事。好怪。
如果这种方式,行不通,那就帮我改成,逐个打开,就是每隔120秒打开一个,打开下一个前,结束浏览器,然后再打开下一个。一直循环。

Windows 10 64位,20H2
作者: thp2008    时间: 2021-3-31 14:05

感谢went大佬的帮助,已经可以了,最终版本。已通过测试,没有问题了。
  1. @echo off & cd /d "%~dp0"
  2. setlocal enabledelayedexpansion
  3. set "n=0"
  4. for /f "delims=" %%i in (List.txt) do (
  5.                start "C:\Program Files\Google\Chrome\Application\chrome.exe" "%%i"
  6. echo chrome.exe "%%i"
  7. set /a "n+=1"
  8. if !n! lss 10 (
  9. REM 暂停20秒
  10. timeout /t 20 /nobreak
  11. ) else (
  12. REM 暂停10分钟
  13. timeout /t 600 /nobreak
  14. REM 结束chrome
  15. taskkill /FI "imagename eq chrome*" /f
  16. set "n=0"
  17. )
  18. )
复制代码





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