中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-02 21:37
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 再问一段循环的代码 查看 2,154 回复 24
楼 主 再问一段循环的代码 发表于 2006-12-23 16:11 ·  中国 福建 泉州 电信
中级用户
★★
积分 234
发帖 129
注册 2006-11-28 09:21
19年会员
UID 71989
性别 男
状态 离线
没办法,手中的活没做完,只能再发贴求助了,

主要思路:从一个文本里逐行提取URL中的一部分字符,交给wget去下载网页,然后用find找关键字,找到了提交某个字符给文本,如果遇到网络不好,无法显示页面就重新下载并识别,直到下载到有关键字的正常网页为止,

我现在这样写:

@echo off
for /f "tokens=1,2" %%i in (D:\123.txt) do (
wget -O %%i.htm http://www.cn-dos.net/forum/viewpro.php?uid=%%i
sleep 3000
find "中国DOS联盟论坛" D:\%%i.htm >nul&& echo %%i>>D:\正常.txt
find "无法显示网页" D:\%%i.htm >nul&& 想用当前的URL字符值重新下载怎么写?
)



没有基础搞很久都不成,请大虾们务必指导下,嘿嘿,明天再来看,谢谢>>>>>
2 发表于 2006-12-23 22:55 ·  中国 福建 泉州 电信
中级用户
★★
积分 234
发帖 129
注册 2006-11-28 09:21
19年会员
UID 71989
性别 男
状态 离线
再看下~~
3 发表于 2006-12-24 02:08 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  顶楼的,请你把条件说得清楚一点,在关键的地方用模糊指代的语言是不可能让别人帮你想办法的。

  请你至少把以下内容交代清楚:

  1、一个文本?什么内容?具体格式?有何规律?
2、URL中的哪部分字符?
  3、find关键字是什么?
  4、提交字符给文本?什么样的字符?交给哪个文本?

  缺少了以上任何一项,不可能写出任何一行代码。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
4 发表于 2006-12-24 02:11 ·  中国 甘肃 兰州 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
如果遇到网络不好,无法显示页面就重新下载并识别,直到下载到有关键字的正常网页为止
这点可以用wget的自身参数实现
5 发表于 2006-12-24 02:13 ·  中国 甘肃 兰州 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
sleep 3000
这句没有起到什么作用,可以删除
6 发表于 2006-12-24 02:21 ·  中国 福建 泉州 电信
中级用户
★★
积分 234
发帖 129
注册 2006-11-28 09:21
19年会员
UID 71989
性别 男
状态 离线
Originally posted by namejm at 2006-12-23 13:08:
 㠮..

  1、一个文本?什么内容?具体格式?有何规律?
只是举个例就性,如上面那个%%i就是UID,逐行提取
2、URL中的哪部分字符?
如:
54899
476666
65453
2439
  3、find关键字是什么?
要设定关键字是"无法显示网页",时重新下载网页,这个是防止网络不好是用的,也是我发贴想问的..
  4、提交字符给文本?什么样的字符?交给哪个文本?
这个不用回答,echo %%i>>D:\正常.txt这些我自己来完成

不知斑斑明白了吗?对不起哦~~
7 发表于 2006-12-24 02:26 ·  中国 福建 泉州 电信
中级用户
★★
积分 234
发帖 129
注册 2006-11-28 09:21
19年会员
UID 71989
性别 男
状态 离线
Originally posted by vkill at 2006-12-23 13:13:
sleep 3000
这句没有起到什么作用,可以删除


是吗?主要是想提高代码的可靠性,想100%下载来,不要有无法显示的..


可以用wget的自身参数实现 ..

大虾指教下,非常之感谢!!!
8 发表于 2006-12-24 02:30 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  1、请把你的 123.txt 内容张贴一部分出来,“上面那个%%i就是UID” 这样的说法对写代码没有任何帮助,说了也等于没说;
  2、在没有见到 123.txt 的内容之前,你这样的说法没有任何意义,还是白说;
  3、不发表任何意见;
  4、你这样一说,我好象明白了些什么,但是我很快又什么也不明白了。

  说到底,你还是不太明白请求别人帮助的时候,究竟该给别人提供些什么信息,请你站在解答问题这个角度来思考,想想该提供些什么信息。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
9 发表于 2006-12-24 02:36 ·  中国 福建 泉州 电信
中级用户
★★
积分 234
发帖 129
注册 2006-11-28 09:21
19年会员
UID 71989
性别 男
状态 离线
Originally posted by namejm at 2006-12-23 13:30:

  1、请把你的 123.txt 内容张贴一部分出来,“上面那个%%i就是UID” 这样的说法对写代码没有任何帮助,说了也等于没说;
  2、在没有见到 123.txt 的内容之前,你这样的说法没有任何意义,还是白说;

123.TXT就是这样的,一次只提取一行,我那些代码已经做到了:
54899
476666
65453
2439

主要想遇到网络故障时,不断的去下载没完成的..比如在提取到"65453"去下载时遇到网络故障,就是想不段的去试下载这个含"65453"URL的网页

[ Last edited by ka56 on 2006-12-23 at 01:39 PM ]
10 发表于 2006-12-24 02:46 ·  中国 甘肃 兰州 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
wget的参数,baidu搜索很多的啊
11 发表于 2006-12-24 02:55 ·  中国 福建 泉州 电信
中级用户
★★
积分 234
发帖 129
注册 2006-11-28 09:21
19年会员
UID 71989
性别 男
状态 离线
Originally posted by vkill at 2006-12-23 13:46:
wget的参数,baidu搜索很多的啊

wget -c -O
可以吗?

但我还是想知道怎么去循环下载.....

@echo off
for /f "tokens=1,2" %%i in (D:\123.txt) do (
::就是想让脚本回到这里,%%i这个值应该保持当前的值
wget -O %%i.htm http://www.cn-dos.net/forum/viewpro.php?uid=%%i
sleep 3000
find "中国DOS联盟论坛" D:\%%i.htm >nul&& echo %%i>>D:\正常.txt
find "无法显示网页" D:\%%i.htm >nul&& .................
)

[ Last edited by ka56 on 2006-12-23 at 01:59 PM ]
12 发表于 2006-12-24 03:11 ·  中国 福建 泉州 电信
中级用户
★★
积分 234
发帖 129
注册 2006-11-28 09:21
19年会员
UID 71989
性别 男
状态 离线
主要想问循环怎么写~~~~
13 发表于 2006-12-24 04:00 ·  中国 福建 泉州 电信
中级用户
★★
积分 234
发帖 129
注册 2006-11-28 09:21
19年会员
UID 71989
性别 男
状态 离线
@echo off
for /f "tokens=1,2" %%i in (D:\123.txt) do (
:标记
wget -O %%i.htm http://www.cn-dos.net/forum/viewpro.php?uid=%%i
sleep 3000
find "中国DOS联盟论坛" D:\%%i.htm >nul&& echo %%i>>D:\正常.txt
find "非正常的字符" D:\%%i.htm >nul&& 在这里GOTO到标记不行吧?
)

正常时:
find "中国DOS联盟论坛" D:\%%i.htm >nul&& echo %%i>>D:\正常.txt
到非正常时想重新下载,很多时候是需要重新下载的:
find "非正常的字符" D:\%%i.htm >nul&& 找到非正常的后要重新下怎么写???

这些代码对我比较重要,大虾抽空指导下吧...!

[ Last edited by ka56 on 2006-12-23 at 03:05 PM ]
14 发表于 2006-12-24 04:22 ·  中国 北京 朝阳区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
) 关于并发高速下载

普通循环方式下载很多网页(比如要下载几千个页面)会很慢,
建议 Start 出 30 或 100 个 CMD 同时下载(同时连入不同的页面下载),反正有的是内存,不用白不用。

而且宽带速度也快,但不可能下载一个页面就占满了你的带宽,而且当你连接网站指定要下某个页面时,还要等待那边数据库提取……

所以,同时进行 30 个任务,这样速度极快~:)
楼主可以试试用 Start 来模拟多任务并发更好玩~:)


) 关于是否继续等待 或是 多次重复下载那些没有正常连接网页

多次下载没有正常连接的页面,更耽误和影响还在列队中的任务。
所以建议楼主: 
        1) 不管有无正常下载的页面,都下载完了最后扫描有哪些没有下载,然后主要针对它们多次试下载。
        2) 下载,发现未正常连接或网页无法下载,判断并追加写入日志,最后重新下载日志中的网页。
           
根据上面模拟“多任务”原理,先下载,最后重新补那些没正常下载的页面,速度会非常快。


(以上只是个人想法,未经实验证明其可行性)

[ Last edited by redtek on 2006-12-23 at 03:24 PM ]
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
15 发表于 2006-12-24 04:31 ·  中国 福建 泉州 电信
中级用户
★★
积分 234
发帖 129
注册 2006-11-28 09:21
19年会员
UID 71989
性别 男
状态 离线
Originally posted by redtek at 2006-12-23 15:22:
) 关于并发高速下载

普通循环方式下载很多网页(比如要下载几千个页面)会很慢,
建议 Start 出 30 或 100 个 CMD 同时下载(同时连入不同砮..


谢谢兄弟的耐心,单个BAT不怕慢,要快可以多开几个,,,主要得完善脚本..对吗?
我需要下载的网页确实有上万个,考虑可能有网页故障或IP被封等因素,多次下载一个页面是必要的,所以我很想学怎么循环...这样一个BAT运行完后,所有的任务也执行完了~~不用在重试了~~

[ Last edited by ka56 on 2006-12-23 at 03:36 PM ]
论坛跳转: