[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理如何查找含有指定字符的行并按层次建立文件夹?

感谢inittab上尉(他的代码在13楼,已经建立很好的框架)和管理员,现在把要求重新说一遍:

1.下载该页:
  1. http://lnlib.vip.qikan.com/Mag.aspx?issn=1005-0043&year=2009&issue=5
复制代码
,根据页面内容建立一级文件夹(即期刊名,该页"期刊目录"这行):“《电脑爱好者》2009年第5期”,
2.在一级文件夹中建立带序号的二级文件夹(即栏目名:该页有”[“的行中):"000_新视界","001_新人帮","002_稀饭软组织"等。
3.在各二级栏目文件夹下依序号建立三级文件夹(即文章名,页面源码含有/article.aspx?titleid=dnah的行中):如:在“000_新视界”文件夹下建立“000_新闻报”,“001_联想不是冒进是“贸进”等文件夹。
3.下载文章,转为txt,去掉正文以外的内容,保存在同名文件夹中,更名为src.txt。如果文章超过一页,要把各页按顺序合并为src.txt,如:http://lnlib.vip.qikan.com/article.aspx?titleid=dnah20090501,下面还有第二页的链接:http://lnlib.vip.qikan.com/article.aspx?titleid=dnah20090501-1(规律也很明显:第二页的链接是第一页链接-1,以此类推)
4.一个小要求:src.txt最好不要带有黑块
5.小问题:13楼代码中的:sed "s/\/Article\/dnah\//>/g;s/\" target=\"_blank\" class=\"/@ 何解?

最终文件夹结构如下:
\《电脑爱好者》2009年第5期
     \ 000_新视界
            \000_国标UFO能否推行开来\src.txt
            \001_偷菜需要歇菜吗?\src.txt
            \002_揭开迅雷会员、QQ会员超低价地下交易迷局\src.txt
            \003_科幻片成为现实,人机交互让未来零距离\src.txt
    \001_菜鸟集训营
           \000_手机上网,你也需要功能性“饮料”\src.txt
           \001_我要下达USB禁用令!\src.txt
           \002_搞定烦人的等级编号\src.txt
           \003_大硬盘的烦恼——复制加速工具\src.txt
           \004_晋级高手宝典 DIY不再难\src.txt

[ 本帖最后由 hmgl 于 2010-3-17 13:18 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

最后一行的行首有没有空格?
你自己“想”出来的数据格式可能会影响代码的运行,能否把原始文件以附件的形式传上来看看?
Do All in Command Line

TOP

上传最原始的文件,有用的数据已经提取出来放在一楼代码栏中,最后有空行

[ 本帖最后由 hmgl 于 2010-3-6 12:13 编辑 ]

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=4,5 delims=[]=<>" %%a in ('findstr "article.aspx? [" 1.txt') do (
  3.     set str=%%a
  4.        if "!str:~0,4!"=="dnah" (set dir2=%%b) else set dir1=%%a
  5.        md !dir1!\!dir2!
  6. )
  7. pause
复制代码

TOP

原帖由 inittab 于 2010-3-5 18:10 发表
@echo off&setlocal enabledelayedexpansion
for /f "tokens=4,5 delims=[]=" %%a in ('findstr "article.aspx? [" 1.txt') do (
    set str=%%a
       if "!str:~0,4!"=="dnah" (set dir2=%%b) else set di ...


谢谢了,写的高度精炼,就是我执行的时候停顿了,可能我其余代码有错。另外我的要求现在不光是建立文件夹,详情请看一楼更改后的内容

[ 本帖最后由 hmgl 于 2010-3-6 12:16 编辑 ]

TOP

如何逐行提取含有指定字符的文本,建立带序号的多层文件夹?

本楼内容转移到一楼,方便大家

[ 本帖最后由 hmgl 于 2010-3-6 11:16 编辑 ]

TOP

提取含有哪个指定字符的文本?建立什么样的文件夹?

http://bbs.bathome.net/thread-7263-1-1.html
跟这个帖子有什么不同?
Do All in Command Line

TOP

原帖由 BatCoder 于 2010-3-5 23:27 发表
提取含有哪个指定字符的文本?建立什么样的文件夹?

http://bbs.bathome.net/thread-7263-1-1.html
跟这个帖子有什么不同?


http://bbs.bathome.net/thread-7263-1-1.html的代码是建文件夹,我执行后就停顿了,不知道哪里有错,所以索性把最终要求全贴到1楼,代码最好易读性高,便于学习,修改。

[ 本帖最后由 hmgl 于 2010-3-6 11:19 编辑 ]

TOP

怎么题目又改了。 楼主最好所有要求考虑好。
免得回复跟主题不致,给大家造成困扰。

TOP

不好意思,本来想一步步请教,不想太麻烦诸位,可是搞不定,所以这次把全部要求贴到这里

TOP

你是不是想提取电脑爱好者的期刊啊,呵呵。
你想达到什么样的效果直接给出结果就可以了,过程和方法可能会有不同。请大家自己去想就行了。

TOP

原帖由 inittab 于 2010-3-6 12:22 发表
你是不是想提取电脑爱好者的期刊啊,呵呵。
你想达到什么样的效果直接给出结果就可以了,过程和方法可能会有不同。请大家自己去想就行了。


呵呵,被你看破了,最终结果就是要一楼的那个文件夹结构。琢磨了好多天,提问也是围绕这个

TOP

这题有点意思的。花了点时间写,就当练手吧。试试是否符合要求
运行时需要下载好三方工具htox32c.exe  sed.exe放置于相同目录;

  1. @echo off&setlocal enabledelayedexpansion
  2. title "期刊采集器"
  3. :start
  4. set/p qs=请输入电脑爱好者期数:(1-24,按q退出):
  5. if "%qs%"=="q" goto :eof
  6. if %qs% gtr 24 echo\输入有误!!,按任意键重新输入!&pause>nul&goto start
  7. if %qs% leq 0  echo\输入有误!!,按任意键重新输入!&pause>nul&goto start
  8. if not exist 第!qs!期 md 第!qs!期
  9. echo;正在下载,请稍等...
  10. curl -s http://www.qikan.com.cn/MagDetails/1005-0043/2009/%qs%.html | sed -n "/右侧列表内容开始/,/返回新闻时政类期刊按钮开始/p">tmp1.txt
  11. find "本刊文章版于近期发布,您可以阅读原貌版" tmp1.txt >nul && (echo;本期暂未有文字版&goto :eof)
  12. sed "s/\/Article\/dnah\//>/g;s/\" target=\"_blank\" class=\"/@</g;s/^s*$//g" tmp1.txt>tmp2.txt
  13. htox32c /ip tmp2.txt>tmp3.txt 2>nul
  14. echo;建立目录结构并下载处理内容
  15. set/a m=0
  16. for /f "tokens=1,2 delims=@" %%a in (tmp3.txt) do (
  17. if not "%%a"=="" (
  18. if "%%b"=="" (set dir1=00!m!_%%a&set/a m+=1,n=0&md "第!qs!期\!dir1!" 2>nul) else (
  19. set dir2=00!n!_%%b&set/an+=1&md "第!qs!期\!dir1!\!dir2!" 2>nul
  20. curl -s "http://www.qikan.com.cn/Article/dnah/%%a" | sed -n "/rticleReadConText/,/div/p" | sed "1d;/div/d;s/<br>//g;s/\t//g">"第!qs!期\!dir1!\!dir2!\src.txt"
  21. :::::以下两行为调试用,可删除
  22. echo;&echo;======================!%%b===========================================
  23. echo;[DIR]第!qs!期\!dir1!\!dir2!&echo;&type 第!qs!期\!dir1!\!dir2!\src.txt
  24. )
  25. )
  26. )
复制代码

[ 本帖最后由 inittab 于 2010-3-6 16:20 编辑 ]

TOP

期刊下载器名字不错
好像sed的编码不对,建立文件夹的全是乱码:╡┌1╞┌,换了sed的另一个版本,现在正常,
1.能否直接设定起始ur,比如:http://xmlib.vip.qikan.com/Mag.aspx?issn=1005-0043&year=2008&issue=1,从该页面能否自动提取期刊名年数和期数(在期刊目录那行),作为文件夹名,不是只用期数做文件夹名,该页面含有各年各期的url,批处理能否可以直接将其他各期下载
3.期刊中的文章可能很长,会分为两个甚至更多页面,比如:http://lnlib.vip.qikan.com/article.aspx?titleid=dnah20090501,下面还有第二页面的链接,这两页或者更多的内容能否合并为一个src.txt

[ 本帖最后由 hmgl 于 2010-3-6 18:11 编辑 ]

TOP

最新的win32版 sed 4.2下载。
http://ncu.dl.sourceforge.net/pr ... sed-4.2-1-setup.exe
安装完成后,将
C:\Program Files\GnuWin32\bin
下的所有文件复制到c:\windows\system32 下。批处理所有目录如果有sed.exe ,需要删除。

其他的页面采集的话,需要针对具体情况改动代码(针对性是很强的,不过原理思路差不多的)。

TOP

返回列表