标题: [其他] 如何同时执行多条第三方命令,结束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 编辑
- @echo off&setlocal enabledelayedexpansion
- set f=aria2c.exe&set /a n=0
- for /f "delims=*" %%a in ('type tuwan.txt^|findstr /i /r /n "h"')do (set "A=%%a"&set A=!A: = !
- for /f "tokens=1,2,3,4,5* delims= " %%b in ('echo !A!') do (
- if not exist "%%c\%%d" md "%%c\%%d"
- 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 (
- set "fn=%%i"&set fn=!fn:^[=!!fn:^]=!&echo;%%e>>%%~nc未下载.TXT
- )
- setlocal
- for /f "tokens=1,2,* delims=," %%k in ('tasklist /fo csv^|findstr /i /c:"aria2c.exe"') do (set /a n+=1)
- if !n! gtr 5 timeout 10
- if !n! gtr 10 pause
- endlocal
- )
- )
- pause
复制代码
这个只能单个不能多个,怎样做能同时执行多个任务?
作者: xp3000 时间: 2021-5-9 07:34
回复 2# xczxczxcz
XP搜索文件方便,用得轻松
作者: 523066680 时间: 2021-5-9 09:19
本帖最后由 523066680 于 2021-5-9 09:49 编辑
我打开txt文件,疑似开起了车车复制代码
就让我想起了之前抓W4B图片的脚本,Perl写的。N个常驻线程,循环获取任务下载。- sub thread_func
- {
- our (@mission, @headers, $progress, $total);
- my ($ua) = @_;
- my $target;
-
- while ( $#mission >= 0 )
- {
- $progress++;
- $target = shift @mission;
-
- printf "[%d] [%03d/%03d] %s\n", threads->tid(), $progress, $total;
- get_pics( threads->tid(), $ua, $target );
- }
- }
复制代码
不过最近又学了一下,mojo本来就支持多线程- my $ua = Mojo::UserAgent->new()->with_roles('+Queued');;
- $ua->max_active(10); #限制并发数
- for ( 1 .. 10086 )
- {
- # Non-blocking request
- $ua->get( $url => sub ($ua, $tx) { say gbk($tx->result->dom->at("title")->text); }
- }
- $loop->start unless $loop->is_running;
复制代码
---
按理说 aria2 这么时髦的工具,应该也是内置支持多线程下载的,-j, --max-concurrent-downloads=<N>- aria2c.exe -i links.txt -j 6
复制代码
- 05/09 09:46:09 [NOTICE] Downloading 20 item(s)
- [DL:0B][#ea89d8 0B/0B][#2c34b3 0B/0B][#8e6c5a 0B/0B][#8fb920 0B/0B][#9ca066 0B/0B](+1)
- 05/09 09:46:10 [NOTICE] Download complete: D:/temp/0001-06.jpg
- 05/09 09:46:10 [NOTICE] Download complete: D:/temp/0001-01.jpg
- 05/09 09:46:10 [NOTICE] Download complete: D:/temp/0001-02.jpg
- 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-05.jpg
- 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-04.jpg
- 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-03.jpg
- 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-07.jpg
- [DL:2.4MiB][#6fe37d 112KiB/314KiB(35%)][#14a780 0B/0B][#6124fa 0B/0B][#e3781d 0B/0B][#19422e 0B/0B](+1)
- 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-08.jpg
- 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-12.jpg
- 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-13.jpg
- 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-09.jpg
- 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-10.jpg
- 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-11.jpg
- 05/09 09:46:11 [NOTICE] Download complete: D:/temp/0001-16.jpg
- 05/09 09:46:12 [NOTICE] Download complete: D:/temp/0001-14.jpg
- 05/09 09:46:12 [NOTICE] Download complete: D:/temp/0001-17.jpg
- 05/09 09:46:12 [NOTICE] Download complete: D:/temp/0001-15.jpg
- [DL:2.8MiB][#9b3b42 112KiB/227KiB(49%)][#1ae2bd 96KiB/376KiB(25%)][#ee53c9 256KiB/256KiB(99%)]
- 05/09 09:46:12 [NOTICE] Download complete: D:/temp/0001-20.jpg
- 05/09 09:46:12 [NOTICE] Download complete: D:/temp/0001-18.jpg
- 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 ... 然后- @echo off
- for %%a in (*.txt) do (
- mkdir %%~na
- aria2c -i "%%a" -d %%~na -j 6
- rem -j 6 表示线程数
- )
- pause
复制代码
我试了一下,速度是真滴快
作者: xp3000 时间: 2021-5-9 10:19
哦,谢谢!!!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |