Board logo

标题: [其他] 如何同时执行多条第三方命令,结束1个再加1个 [打印本页]

作者: xp3000    时间: 2021-5-8 09:26     标题: 如何同时执行多条第三方命令,结束1个再加1个

假设有1000行,aria2c下载,不要提取链接批量下载,
只允许读取5行执行下载,有一个结束就执行下一行下载命令

链接:https://pan.xunlei.com/s/VM_8ZXiEAIaOcC8i1PhUXTTUA1
提取码:c8tz
作者: xczxczxcz    时间: 2021-5-8 17:48

离开XP 你会发现这个世界更美好。
作者: xp3000    时间: 2021-5-9 07:31

本帖最后由 xp3000 于 2021-5-9 10:22 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set f=aria2c.exe&set /a n=0
  3. for /f "delims=*" %%a in ('type tuwan.txt^|findstr /i /r /n "h"')do (set "A=%%a"&set A=!A: = !
  4.     for /f "tokens=1,2,3,4,5* delims= " %%b in ('echo !A!') do (
  5.     if not exist "%%c\%%d" md "%%c\%%d"
  6.         for /f "tokens=1,* delims==" %%i in ('start /I /MIN aria2c.exe -c -s 5 -d "%~dp0%%c\%%d" %%e^|findstr /i /r "mERROR.*URI=[^\r\n]*"') do (
  7.         set "fn=%%i"&set fn=!fn:^[=!!fn:^]=!&echo;%%e>>%%~nc未下载.TXT
  8.         )
  9. setlocal
  10.         for /f "tokens=1,2,* delims=," %%k in ('tasklist /fo csv^|findstr /i /c:"aria2c.exe"') do (set /a n+=1)
  11.         if !n! gtr 5 timeout 10
  12.         if !n! gtr 10 pause
  13. endlocal
  14.     )
  15. )
  16. pause
复制代码
这个只能单个不能多个,怎样做能同时执行多个任务?
作者: xp3000    时间: 2021-5-9 07:34

回复 2# xczxczxcz
XP搜索文件方便,用得轻松
作者: 523066680    时间: 2021-5-9 09:19

本帖最后由 523066680 于 2021-5-9 09:49 编辑

我打开txt文件,疑似开起了车车
  1. 浴缸里的兔子
  2. 黑丝和足
复制代码
就让我想起了之前抓W4B图片的脚本,Perl写的。N个常驻线程,循环获取任务下载。
  1. sub thread_func
  2. {
  3.     our (@mission, @headers, $progress, $total);
  4.     my ($ua) = @_;
  5.     my $target;
  6.     while ( $#mission >= 0 )
  7.     {
  8.         $progress++;
  9.         $target = shift @mission;
  10.         printf "[%d] [%03d/%03d] %s\n", threads->tid(), $progress, $total;
  11.         get_pics( threads->tid(), $ua, $target );
  12.     }
  13. }
复制代码
不过最近又学了一下,mojo本来就支持多线程
  1. my $ua = Mojo::UserAgent->new()->with_roles('+Queued');;
  2. $ua->max_active(10);  #限制并发数
  3. for ( 1 .. 10086 )
  4. {
  5.     # Non-blocking request
  6.     $ua->get( $url => sub ($ua, $tx) { say gbk($tx->result->dom->at("title")->text); }
  7. }
  8. $loop->start unless $loop->is_running;
复制代码
---
按理说 aria2 这么时髦的工具,应该也是内置支持多线程下载的,-j, --max-concurrent-downloads=<N>
  1. aria2c.exe -i links.txt -j 6
复制代码
  1. 05/09 09:46:09 [NOTICE] Downloading 20 item(s)
  2. [DL:0B][#ea89d8 0B/0B][#2c34b3 0B/0B][#8e6c5a 0B/0B][#8fb920 0B/0B][#9ca066 0B/0B](+1)
  3. 05/09 09:46:10 [NOTICE] Download complete: D:/temp/0001-06.jpg
  4. 05/09 09:46:10 [NOTICE] Download complete: D:/temp/0001-01.jpg
  5. 05/09 09:46:10 [NOTICE] Download complete: D:/temp/0001-02.jpg
  6. 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-05.jpg
  7. 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-04.jpg
  8. 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-03.jpg
  9. 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-07.jpg
  10. [DL:2.4MiB][#6fe37d 112KiB/314KiB(35%)][#14a780 0B/0B][#6124fa 0B/0B][#e3781d 0B/0B][#19422e 0B/0B](+1)
  11. 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-08.jpg
  12. 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-12.jpg
  13. 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-13.jpg
  14. 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-09.jpg
  15. 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-10.jpg
  16. 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-11.jpg
  17. 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-16.jpg
  18. 05/09 09:46:12 [NOTICE] Download complete: D:/temp/0001-14.jpg
  19. 05/09 09:46:12 [NOTICE] Download complete: D:/temp/0001-17.jpg
  20. 05/09 09:46:12 [NOTICE] Download complete: D:/temp/0001-15.jpg
  21. [DL:2.8MiB][#9b3b42 112KiB/227KiB(49%)][#1ae2bd 96KiB/376KiB(25%)][#ee53c9 256KiB/256KiB(99%)]
  22. 05/09 09:46:12 [NOTICE] Download complete: D:/temp/0001-20.jpg
  23. 05/09 09:46:12 [NOTICE] Download complete: D:/temp/0001-18.jpg
  24. 05/09 09:46:12 [NOTICE] Download complete: D:/temp/0001-19.jpg
复制代码

作者: xp3000    时间: 2021-5-9 09:47

谢谢,整个下载下来过,没漏点,
我那个就是关闭网络时候,改为其他程序测试可以,用aria2c打开网络时候以为没完成命令就不行了,
造成setlocal到endlocal完全无用,也不会弄
作者: 523066680    时间: 2021-5-9 09:51

本帖最后由 523066680 于 2021-5-9 09:54 编辑

回复 6# xp3000


    我是觉得 aria2支持多线程,你把多个下载链接的txt丢给aria2,指定线程数就可以了。没必要自己开多个进程。
而且你的脚本中每个链接 start 一次 aria2,而不是丢给aria2统一下载,中间会增加很多时间间隔。
作者: xp3000    时间: 2021-5-9 09:53

回复 5# 523066680
这两个怎么运行
作者: xp3000    时间: 2021-5-9 09:59

aria2支持多线程,但是有时候要用到其他第三方工具,就不会了
作者: 523066680    时间: 2021-5-9 10:12

本帖最后由 523066680 于 2021-5-9 10:23 编辑

回复 8# xp3000


    不说我那个,那个是Perl的,回到主题上来,aria2c 多线程下载任务,并存储到不同目录。
因为你这个是要存入不同目录的,所以不能一股脑丢给aria2c,可以按不同的目录划分多个txt,比方说
浴缸里的兔子.txt, 黑丝和足.txt, 短发和长发.txt ... 然后
  1. @echo off
  2. for %%a in (*.txt) do (
  3.   mkdir %%~na
  4.   aria2c -i "%%a" -d %%~na -j 6
  5.   rem -j 6 表示线程数
  6. )
  7. pause
复制代码
我试了一下,速度是真滴快
作者: xp3000    时间: 2021-5-9 10:19

哦,谢谢!!!




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