中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-15 14:55
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 迅雷下载后关机 查看 1,895 回复 14
楼 主 迅雷下载后关机 发表于 2010-04-24 21:01 ·  中国 广东 广州 电信
初级用户
★★
积分 89
发帖 76
注册 2009-12-13 13:41
UID 156499
性别 男
状态 离线
多谢各位的建议,判断的准确度已经进一步了。

这个P处理用处不大,在这只做参考。。

代码是以迅雷5写的,如果你不是用迅雷5的,请把名字改成你的下载器名。已经

测试过其他下载器同样可以,只要把下载器的名字替换掉以下的Thunder5.exe
即可。

把以下代码保存为“迅雷关机监控.bat”:

@echo off&setlocal EnableDelayedExpansion
::迅雷关机监控 code by gool123456 @ 2010
::============================
mode con cols=50 lines=10
title 迅雷关机监控 code by gool123456
set /p dir_=把需要监控的文件夹拖入(当前文件夹直接回车):
if "%dir_%"=="" set "dir_=%cd%"
set "dir_=%dir_:"=%"
cd.>"c:\temp.txt"
dir "%dir_%" /a-d /b>>"c:\temp.txt"
for /f "delims=:" %%a in ('dir "%dir_%" /a-d /b^|findstr /n .') do (set /a "ge=%%a")
:begin
echo 下载未进行.等待开始...
ping 127.1 -n 3 >nul&cls
:jj
for /f "delims=:" %%b in ('dir "%dir_%" /a-d /b^|findstr /n .') do (set /a "ge1=%%b")
if !ge1! GTR !ge! goto :xiazai
if !ge1! equ !ge! goto :begin
:xiazai
ping 127.1 -n 3 >nul&cls
<nul set/p= 当前时间 : %time% &set/p=已耗时:%tm%秒<nul
set /a link=0
for /f "tokens=2" %%i in ('tasklist /fi "imagename eq Thunder5.exe" /nH 2^>nul^|findstr /i "Thunder5.exe"') do (
set id=
set /a id=%%i
if "!id!"=="" goto :sa
for /f "tokens=4" %%y in ('netstat -anop tcp^|findstr /e /c:"!id!"') do (
if "%%y"=="" goto :eof
if "%%y"=="ESTABLISHED" (set /a link=!link!+1)
)
)
if !link! GEQ 4 (echo.&echo.&echo 迅雷下载中.....) else (echo.&echo.&echo 尝试连接.继续等待...)
:sa
set new=
set /a tm+=3
if not "!link!"=="0" (echo.&echo 当前共!link!个连接 & goto :jj) else (
for /f "delims=" %%h in ('dir "%dir_%\*.td" "%dir_%\*.td.cfg" /a-d /b 2^>nul') do (
if "%%h"=="" (goto :sd)
findstr /x /c:"%%h" c:\temp.txt >nul||set /a new+=1
)
set /a txt=%ge1%-%ge%
if !txt! equ !new! (goto :jj)
)
:sd
shutdown /f /s /c "^-^下载完毕!正在执行关机 "
:un
cls&set /p undown=如果你还未进行下载,请输入n来取消关机,否则不输入:
if /I "%undown:~0,1%"=="n" (shutdown -a &echo 你取消关机,请按任意键退出..&pause>nul) else (goto :un)


[ Last edited by gool123456 on 2010-5-6 at 21:49 ]
2 发表于 2010-04-24 21:06 ·  中国 广东 广州 电信
初级用户
★★
积分 89
发帖 76
注册 2009-12-13 13:41
UID 156499
性别 男
状态 离线
= = 发上去的文件忘了改成论坛名了 呵呵。
3 发表于 2010-04-24 22:39 ·  中国 广东 深圳 电信
初级用户
★★
游手好闲 + 无所事事 ..
积分 194
发帖 167
注册 2007-04-30 09:43
UID 87022
性别 男
状态 离线
这个批处理是相当的无聊。。。


你还不如写个更简单实用的,自动监控迅雷下载任务,完成后自动转移到其他目录,避免迅雷上传,影响网速。
4 发表于 2010-04-24 23:16 ·  中国 四川 攀枝花 电信
初级用户
★★
积分 147
发帖 131
注册 2008-09-22 23:54
UID 126352
性别 男
状态 离线
大致看了下,楼主可能对网络协议不是很懂(其实我也不是很懂)
SYN_SENT:是在用connect 函数发起连接
ESTABLISHED:表示一个tcp连接经过三次握手后已经建立完毕,可以开始通信

你的判断的应该先排除迅雷与迅雷服务器的连接,
netstat 显示的tcp状态似乎没有能判断这个端口是否是正在传送数据,建立起tcp连接后程序可以通过某端口“随时”发送数据,状态还是ESTABLISHED,所以不能说tcp状态为ESTABLISHED,就说迅雷在下东西了。

[ Last edited by rs369007 on 2010-4-24 at 23:26 ]
freedom!
5 发表于 2010-04-25 00:11 ·  中国 广东 广州 电信
初级用户
★★
积分 89
发帖 76
注册 2009-12-13 13:41
UID 156499
性别 男
状态 离线
Originally posted by exzzz at 2010-4-24 22:39:
这个批处理是相当的无聊。。。


你还不如写个更简单实用的,自动监控迅雷下载任务,完成后自动转移到其他目录,避免迅雷上传,影响网速。


这个批处理也是有个朋友想通过迅雷下载完毕后,通过批处理或者不用第3方软件当迅雷下完指定任务后可以自动关机。
我在这个功能上加上了一些小功能,其实真正目的是为了下载后能通过它来关机。

而不是真正做个下载器。这也没意思。

你怕上传影响网速,还不如直接KILL了。

[ Last edited by gool123456 on 2010-4-25 at 14:01 ]
6 发表于 2010-04-25 15:11 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
UID 79003
性别 男
状态 离线
本身不是有这个功能麽?
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
7 发表于 2010-04-25 21:43 ·  中国 广东 广州 电信
初级用户
★★
积分 89
发帖 76
注册 2009-12-13 13:41
UID 156499
性别 男
状态 离线
Originally posted by slore at 2010-4-25 15:11:
本身不是有这个功能麽?

是有的,在迅雷的“工具”菜单里。
但用批处理监控也不错。优点是监控是否有连接的,不用等待连接断开请求。

[ Last edited by gool123456 on 2010-4-25 at 21:44 ]
8 发表于 2010-04-25 23:20 ·  中国 广东 深圳 电信
初级用户
★★
游手好闲 + 无所事事 ..
积分 194
发帖 167
注册 2007-04-30 09:43
UID 87022
性别 男
状态 离线
Originally posted by gool123456 at 2010-4-25 09:43 PM:

是有的,在迅雷的“工具”菜单里。
但用批处理监控也不错。优点是监控是否有连接的,不用等待连接断开请求。

[ Last edited by gool123456 on 2010-4-25 at 21:44 ]



如楼上某位所言,你没有考虑到连接服务器的情况,连接到服务器之后,也是有连接建立起来的。


此外,我所说的,监控迅雷已下载完成的任务并转移到其他目录,并不是kill就行。

你还得考虑到迅雷有这2个问题:1、下载后并不会自动退出迅雷。2、某个任务下载完成后,还有其他的任务需要下载,不可以kill迅雷,我需要他下载,不要他上传。

[ Last edited by exzzz on 2010-4-25 at 23:22 ]
9 发表于 2010-04-26 05:14 ·  中国 四川 移动
初级用户
★★
积分 154
发帖 67
注册 2007-12-02 16:45
UID 104465
性别 男
状态 离线
迅雷不是有下载完毕自动关机吗?lZ这不是多此一举哇?
10 发表于 2010-04-26 18:19 ·  中国 广东 广州 电信
初级用户
★★
积分 89
发帖 76
注册 2009-12-13 13:41
UID 156499
性别 男
状态 离线
Originally posted by exzzz at 2010-4-25 23:20:



如楼上某位所言,你没有考虑到连接服务器的情况,连接到服务器之后,也是有连接建立起来的。


此外,我所说的,监控迅雷已下载完成的任 ...


如果是限制迅雷上传的,我在网上搜了下方法有很多。就采用了百科其中一种方法写了一句,可以加上

cd /d "%systemroot%\system32"&&del /q "cid_store.dat"&md "cid_store.dat" & (for %%p in (c: d: e: f: g: h: i: j: k: l:) do (if exist %%p (for /f "delims=" %%f in ('dir /s /a-d /b "%%p\Thunder5.exe"^|findstr /i /c:"\Program\Thunder5.exe"') do (del /q "%%~dpfcid_store.dat" & md "%%~dpfcid_store.dat"))))


[ Last edited by gool123456 on 2010-4-26 at 18:44 ]
11 发表于 2010-04-26 18:21 ·  中国 广东 广州 电信
初级用户
★★
积分 89
发帖 76
注册 2009-12-13 13:41
UID 156499
性别 男
状态 离线
Originally posted by rs369007 at 2010-4-24 23:16:
大致看了下,楼主可能对网络协议不是很懂(其实我也不是很懂)
SYN_SENT:是在用connect 函数发起连接
ESTABLISHED:表示一个tcp连接经过三次握手后已经 ...


排除服务器连接似乎很难实现。。按严格来代码中的连接是不准确的,因为我不是计算下载的连接,是所有正常连接。
那个“echo迅雷在下载中..”似乎有点在忽悠别人。。。
判断迅雷是否在下载,目前我还没找到窍门。但如果是FTP下载,其实是可以计算文件大小来判断下载速度的。
12 发表于 2010-04-26 18:52 ·  中国 广东 广州 电信
初级用户
★★
积分 89
发帖 76
注册 2009-12-13 13:41
UID 156499
性别 男
状态 离线
写来玩的~
13 发表于 2010-04-26 18:59 ·  中国 四川 攀枝花 电信
初级用户
★★
积分 147
发帖 131
注册 2008-09-22 23:54
UID 126352
性别 男
状态 离线
Originally posted by gool123456 at 2010-4-26 18:21:


其实是可以计算文件大小来判断下载....


我就是楼主这个思路,监控文件大小。不过觉得这个任有一些难度和问题。
1,用for 扩展读取文件大小 %%~zi ,如果文件没有下完大小还是整个文件完整的大小。

如果监控链接状态,假设能正常监控数据传输状态,但是传输过程中完全有可能会出现链接被意外终止的情况,这必须被考虑(比如网线接口松了、交换机故障等),超过一定时间链接会被终止。所以建议 监控链接状态与检查文件的完整性。

[ Last edited by rs369007 on 2010-4-26 at 19:15 ]
freedom!
14 发表于 2010-04-26 19:37 ·  中国 四川 攀枝花 电信
初级用户
★★
积分 147
发帖 131
注册 2008-09-22 23:54
UID 126352
性别 男
状态 离线
监控链接刚查了下,在tcp状态下,发起socket主动shutdown的会进入TIME_WAIT状态,如果能先记录一下迅雷刚启动时与所有外部ip的连接(记录下ip和状态吧),间隔<4分钟检查比对一次看看有不有新出现的和其他ip的连接出现TIME_WAIT的。

以前我也写过网络程序用c,如果迅雷主动调用shutdown、或closesocket,应该可以判断迅雷这次和这个“资源服务器”下载对话已经结束了。
freedom!
15 发表于 2010-04-26 20:30 ·  中国 广东 广州 电信
初级用户
★★
积分 89
发帖 76
注册 2009-12-13 13:41
UID 156499
性别 男
状态 离线
Originally posted by rs369007 at 2010-4-26 18:59:


我就是楼主这个思路,监控文件大小。不过觉得这个任有一些难度和问题。
1,用for 扩展读取文件大小 %%~zi ,如果文件没有下完大小还是整个文件 ...

嗯 ,是很好的建议。
今天测试过了,确实发现了迅雷有时不在正常连接状态下,依然可以下载. 不知道是不是UDP连接在作怪,还是流量有延缓。。(前提是我限制了下载速度为2K)。我对这方面不是很了解.

[ Last edited by gool123456 on 2010-4-26 at 20:54 ]
论坛跳转: