找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25927|回复: 8

[文本处理] [已解决]求助:下载并处理网页另生成文件的批处理

[复制链接]
发表于 2015-9-18 23:51:55 | 显示全部楼层 |阅读模式
想实现下载网页,提取指定字符之间的内容,像网页源码一样,前面后面不空行,不空格(中间有空格除外),实现生成的文本文件如下
  1. start "" http://www.1.com
  2. start "" http://www.2.com
  3. start "" http://www.3.com
  4. start "" http://www.4.com
复制代码
而本人大致写出的批处理如下,请高手指教:
  1. ping blog.sina.com.cn && goto dianxin || goto tietong ::判断是否电线或铁通,选择最快的网页下载
  2. :dianxin
  3. aria2c.exe -d D:\ -o 1.htm http://blog.sina.com.cn/s/blog_823cbc920100v5gj.html ::将网页下载到D盘并改名1.txt
  4. ???代码不知 >a.txt ::将下载的改名的1.htm提取两个“**********”之间的内容并生成a.txt,其内容见最上面的代码行
  5. del 1.htm ::删除多余的文件
  6. exit
  7. :tietong
  8. aria2c.exe -d D:\ -o 1.htm http://chren123.blog.163.com/blog/static/253137098201581811214839/ ::将网页下载到D盘并改名1.txt
  9. ???代码不知 >a.txt ::将下载的改名的1.htm提取两个“**********”之间的内容并生成a.txt,其内容见最上面的代码行
  10. del 1.htm ::删除多余的文件
  11. exit
复制代码
上述两个网页的源码见附件


经验证:二楼的代码在手动运行有效,但一旦调用命令形式就无法正常运行

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-9-19 10:17:42 | 显示全部楼层
本帖最后由 pcl_test 于 2015-9-19 10:27 编辑

全部htm下载完成后运行
  1. //&cls&dir /b *.htm|cscript.exe -nologo -e:jscript "%~f0"&pause&exit/b

  2. while(!WScript.StdIn.AtEndOfStream){
  3.     var file = WScript.StdIn.ReadLine();
  4.     var fname = file.replace(/\.[^\.]*$/,'');
  5.     var fso = new ActiveXObject("Scripting.FileSystemObject");
  6.     var f = fso.OpenTextFile(file,1);
  7.     var txt = f.ReadAll().match(/\*{8,}[\s\S]+?\*{8,}/m)[0];
  8.     var m = txt.match(/start[^<]+/img);
  9.     var str = '';
  10.     for (var i=0;i<m.length;i++){
  11.         str +=m[i].replace(/\r?\n/g,' ')+'\r\n';
  12.     }
  13.     fso.CreateTextFile(fname+'.txt',2).Write(str);
  14. }
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2015-9-20 15:12:12 | 显示全部楼层
回复 2# pcl_test


    在桌面运行阁下的代码可以执行,但到其他如下图目录就不能执行,可否将其整合到一个批处理当中?另外这里无需pause
发表于 2015-9-20 15:25:28 | 显示全部楼层
保证批处理和html放在一个文件夹下
 楼主| 发表于 2015-9-20 18:50:14 | 显示全部楼层
本帖最后由 447219071 于 2015-9-30 23:36 编辑

回复 4# 回家路上 [code]echo //&cls&dir /b *.htm|cscript.exe -nologo -e:jscript "%~f0"&pause&exit/b >D:\run.bat
echo while(!WScript.StdIn.AtEndOfStream){ >D:\run.bat
echo     var file = WScript.StdIn.ReadLine(); >D:\run.bat
echo     var fname = file.replace(/\.[^\.]*$/,''); >D:\run.bat
echo     var fso = new ActiveXObject("Scripting.FileSystemObject"); >D:\run.bat
echo     var f = fso.OpenTextFile(file,1); >D:\run.bat
echo     var txt = f.ReadAll().match(/\*{8,}[\s\S]+?\*{8,}/m)[0]; >D:\run.bat
echo     var m = txt.match(/start[^<]+/img); >D:\run.bat
echo     var str = ''; >D:\run.bat
echo     for (var i=0;i<m.length;i++){ >D:\run.bat
echo         str +=m.replace(/\r?\n/g,' ')+'\r\n'; >D:\run.bat
echo     } >D:\run.bat
echo     fso.CreateTextFile(fname+'.txt',2).Write(str); >D:\run.bat
echo } >D:\run.bat
发表于 2015-9-20 19:04:40 | 显示全部楼层
本帖最后由 回家路上 于 2015-9-20 19:07 编辑

第一步,你得到的run.bat并不正确,自己先试试调正确
(1)echo;想要输出特殊字符,需要转义,像要输出这整个run.bat。。。。多调试
(2)“>”会将原有的文本内容都给覆盖了,要换成">>",或最后整体输出到文件

  1. (
  2.         echo;1111
  3.         echo;1111
  4.         echo;1111
  5. )>D:\run.bat
复制代码
发表于 2015-9-21 15:58:01 | 显示全部楼层
本帖最后由 回家路上 于 2015-9-21 16:00 编辑

回复 1# 447219071


经验证:二楼的代码在手动运行有效,但一旦调用命令形式就无法正常运行????
什么个意思??怎么个验证法??
 楼主| 发表于 2015-9-21 16:26:45 | 显示全部楼层
回复 7# 回家路上

经多次测试,用命令行形式调用你的批处理会出现错误,但手动打开没有问题!可能是命令行调用JScript的原因吧。
能否像这样的方式处理,虽然处理慢,可能要针对两个网页写两个命令,但是能正常执行
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set flag=
  4. for /f "tokens=1* delims=<" %%a in (1.html) do (
  5.   if !flag!==3 goto :eof
  6.   if "%%a" neq "************" if !flag!==2 echo %%a >>a.txt
  7.   echo %%a >%temp%\tmp
  8.   find "********" %temp%\tmp >nul && set /a flag+=1
  9. )
  10. del %temp%\tmp
复制代码
 楼主| 发表于 2015-9-21 18:06:00 | 显示全部楼层
回复 7# 回家路上


    就是用另一批处理调用或CMD下就无效
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 08:58 , Processed in 0.021365 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表