中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: [转贴]cmd下的一些文本处理 上一主题 | 下一主题
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『楼 主』:  [转贴]cmd下的一些文本处理

cmd下的一些文本处理 bbs.et8.net/bbs/showthread.php ... 开头跑个题,插播个广告,隆重推出,铛铛铛铛~~~,excel!excel!excel! m$那个电子表格软件?提它做什么?这题太跑了吧? 做行文本处理!排序,过滤,中间插入,翻个身,倒个个,奇偶行交换,抽取1,4,9..行,合并,交叉合并,首行填充奇数行,等等72变 相比xnix shell,各种文本编辑软件,决不逊色,入门还更容易,帮助文件更为详尽,实为居家旅行,杀人越货的强手货,没有概念的赶紧试用。 使用时需要的仅仅是个思路。思路..思路很重要! 言归正传,还是cmd,用它做文本处理,只能算是勉为其难,凑合着用吧,常做深呼吸,小心给"憋"着了 ==================================================================== 1.列表多个文本文件文件名+文件内容 2.构造001.txt 002.txt 999.txt 文本内容分别是text001 text002 3.构造..001|002|003../01|02|03.htm序列 4.将一堆文本形式的网址单独转换成IE收藏夹的快捷方式 5.将IE收藏夹导出为CSV格式文档 6.有txt文件all.txt 和 a.txt 里面存放的是文件列表,求出a.txt里面没有,而all.txt里有的文件列表 7.文本文件中的单词实现全文自动统计并排序 8.统计一个文本文件中某一单词出现的次数? 9.GB和Maxthon群组转换 10.合并2个字幕文本文件 11.snap&compare 多个html的固定内容 ===================================================================== 1.列表多个文本文件文件名+文件内容 find /v "" *.txt >list.txt *继续观察自带命令的有价值输出 ------------------------------------------------------------ 2.构造001.txt 002.txt 999.txt 文本内容分别是text001 text002 for /l %i in (1,1,9) do @echo text00%i >00%i.txt for /l %i in (10,1,99) do @echo text0%i >0%i.txt for /l %i in (100,1,999) do @echo text%i >%i.txt *分段补零 ----------------------------------------------------------------- 3.构造..001|002|003../01|02|03.htm文件,以下内容保存为.bat文件执行 代码: setlocal ENABLEDELAYEDEXPANSION for /l %%i in (1001,1,1162) do for /l %%j in (101,1,112) do @(set s=%%i && set t=%%j && echo ^<td^>^<a href="http://www.sergeaura.net/TGP/!s:~1,3!/images/!t:~1,2!.jpg"^>!s:~1,3!!t:~1,2!.jpg^</a^>^</td^> >>file.htm) endlocal*嵌套for,两组变量 *00x,0x序号构造,加减高位 ccfer su99原创 ------------------------------------------------------------ 4.将一堆文本形式的网址单独转换成IE收藏夹的快捷方式 for /f "tokens=1,2,3 delims=:/" %i in ('findstr /n "." 文本.txt') do echo [InternetShortcut] >>%k_%i.url && echo url=http://%k >>%k_%i.url *没什么特别的 ------------------------------------------------------------ 5.将IE收藏夹导出为CSV格式文档,以下内容保存为.bat文件执行 代码: for /f "tokens=1,3,4 delims=:" %%i in ('findstr /s "http" *.url') do if %%k neq 0 (echo %%i,http:%%j:%%k >>list.csv) else echo %%i,http:%%j >>list.csv*findstr /s *.*得到文件相对路径,利用之 ------------------------------------------------------------ 6.有txt文件all.txt 和 a.txt 里面存放的是文件列表,求出a.txt里面没有,而all.txt里有的文件列表 #有txt文件 all.txt 和 a.txt 里面存放的是文件列表,a.txt 是 all.txt 的子集,求出a.txt里面没有,而all.txt里有的文件列表 for /f "delims=" %i in (all.txt) do @findstr /x /c:"%i" a.txt >nul || @findstr /x /c:"%i " b.txt >nul || @echo %i>>b.txt *连续的||..||应用 ------------------------------------------------------------ 7.文本文件中的单词实现全文自动统计并排序 一个文本文件,每行有一个单词或字符串(有重复的),几千行。用word或UE只能做到按字典顺序重新排列、或选中某词统计其个数。 有没有一种方法能自动统计每一不同单词的出现次数,并输出结果列表(加按出现次数排序就更好了)。 源文件内容: abc adfg aew dew abc abc aew adfg abc dew adfg ewq abc 自动统计并排序后输出列表(假设): abc    5 adfg    3 aew    2 dew    2 ewq    1 设输入文本为tmp for /f "delims=" %i in (tmp) do @echo %i >> %i.txt @findstr /n "." *.txt >tmp1 for /f "tokens=1-3 delims=:" %i in (tmp1) do @echo %k %j>%i copy *.txt result.txt *分类汇总,excel,awk。。不合用的时候,cmd顶住 *行号=数量 ------------------------------------------------------------ 8.统计一个文本文件中某一单词出现的次数?,以下内容保存为.bat文件执行 find_word.bat 代码: @echo off setlocal ENABLEDELAYEDEXPANSION set /p file=请输入要查询的文件名: set /p name=请输入要查询的单词: set /a n=0 :loop set /a n=n+1 for /f "tokens=%n% delims=,;.()[]{}!? " %%i in (%file%) do if /i %%i equ %name% echo %name% >>%name%.txt if %n% neq 255 (goto loop) else goto end :end for /f "delims=:" %%i in ('findstr /n "." %name%.txt') do set x=%%i echo %name%出现的次数为:%x% del %name%.txt endlocal*for进行单词匹配,慢死人的那种,纯属yy ------------------------------------------------------------ 9.GB和Maxthon群组转换,以下内容保存为.bat文件执行 GB和Maxthon群组转.bat 代码: @echo off :common setlocal ENABLEDELAYEDEXPANSION findstr "CaptorGroup" *.cgp && goto max_gb || goto gb_max :max_gb rd /s/q gb_group md gb_group for %%i in (*.cgp) do echo [Group]>>gb_group\\%%i for %%a in (*.cgp) do for /f "tokens=1-4 delims==:" %%i in ('findstr /n "=" "%%a " ') do set /a n=%%i-2 && echo name!n!=%%j>>gb_group\%%a && echo ^url!n!=%%k:%%l>>gb_group\%%a goto end :gb_max rd /s/q max_group md max_group for %%a in (*.cgp) do for /f "tokens=2 delims==" %%i in ('findstr "." "%%a " ') do echo %%i>>max_group\%%~na.txt for %%a in (max_group\*.txt) do echo [CaptorGroup]>>max_group\%%~na.cgp for %%a in (max_group\*.txt) do for /f "tokens=1,2 delims=: " %%i in ('findstr "." "%%a " ') do if "%%i" neq "http" (set n=%%i) else (if "%%i" == "http" echo !n!=http:%%j>>max_group\%%~na.cgp) del /q max_group\*.txt goto end endlocal :end cls echo 转换完成,请查看子目录 pause exit *两行并一行,一行拆两行 ------------------------------------------------------------ 10.合并2个字幕文本文件 合并2个字幕文本文件 原始文件1如下 代码: 1 00:00:17,920 --> 00:00:18,625 Charlie? 2 00:00:19,858 --> 00:00:20,606 Charlie? 3 00:00:21,635 --> 00:00:23,140 和我一块儿去散步怎样? 4 00:00:23,739 --> 00:00:24,456 不 5 00:00:24,972 --> 00:00:27,317 不,不去,Locke,今天我哪儿都不想去 原始文件2如下 代码: 1 00:00:17,820 --> 00:00:18,525 Charlie? 2 00:00:19,758 --> 00:00:20,506 Charlie? 3 00:00:21,535 --> 00:00:23,040 How about you and I go for a walk? 4 00:00:23,639 --> 00:00:24,356 No. 5 00:00:24,872 --> 00:00:27,217 No, thanks, Locke. I think I'm gonna stay in today. 要求合并后的文件如下 代码: 1 00:00:17,920 --> 00:00:18,625 Charlie? Charlie? 2 00:00:19,858 --> 00:00:20,606 Charlie? Charlie? 3 00:00:21,635 --> 00:00:23,140 和我一块儿去散步怎样? How about you and I go for a walk? 4 00:00:23,739 --> 00:00:24,456 不 No. 5 00:00:24,972 --> 00:00:27,317 不,不去,Locke,今天我哪儿都不想去 No, thanks, Locke. I think I'm gonna stay in today. 想把中英文字幕合并起来,边看片子还可以边学学英文 其实软件上是可以同时加载2个字幕的,也可以实现要求 可是我现在看片子都是在Xbox上看,XBMC这个播放软件在同一时间只能支持一个srt字幕,所以才会有此要求 ============================================================= 设文件名为file1.txt file2.txt,以下内容保存为.bat文件执行 fuck.bat 代码: del 1.txt 2.txt all.txt 合并后文档.txt echo 加一行 >2.txt type file2.txt >>2.txt copy file1.txt 1.txt :#源文件准备 findstr /n "." 1.txt 2.txt >tmp.txt :#合并源文件并添加行号 for /l %%i in (1,1,500) do findstr /r "^1.txt:%%i:" tmp.txt >>all.txt || findstr /r "^2.txt:%%i:" tmp.txt >>all.txt :#分析,构造目标文件 for /f "tokens=3,* delims=:" %%i in (all.txt) do echo %%i%%j >>合并后文档.txt :#滤除多余信息*交叉合并 ------------------------------------------------------------ 11.snap&compare 多个html的固定内容 有以下内容 www.abcd.com/pub/wrok1.html www.abcd.com/pub/wrok2.html www.abcd.com/pub/wrok3.html . .. ... www.abcd.com/pub/wrok(*).html 每个html,几乎整个html部分都是固定内容,除了我要监测的(文本方式打开)第225行,第38位开始,75位结束这段,它们 有不定时的改变,所有html更新的部分也许不止这一个地方,但我只想监测这一段 有没有软件或方法snap一次镜像,然后下次再snap后作出对上次snap的对比,得出哪个url的html内容监测段作出了改变? ========================= 无错误控制,以下内容保存为.bat文件执行 snap&compare.bat 代码: @echo off del 差异.txt 2>nul copy /y snap.txt snap_old.txt 1>nul :#清理及悲愤snap :snap echo ======%date% %time%====== >snap.txt :#加入时间戳 set url=http://www.abcd.com/pub/wrok :#url变量赋值 for /l %%i in (1,1,100) do curl %url%%%i.html | findstr /n "." | findstr /r "^225:" >>tmp.txt && echo %url%%%i >>tmp.txt :#下载htm并过滤所需行 setlocal ENABLEDELAYEDEXPANSION for /f "tokens=1* delims=:" %%i in (tmp.txt) do if "%%i"=="http" (echo %%i%%j !n! >>snap.txt) else set n=%%j endlocal :#整型快照 del tmp.txt :#删除临时文件 :goto if not exist snap_old.txt cls && echo ======第一次建立快照文件snap^.txt^,请再次运行snap^&compare^.cmd获取文件差异====== && pause && goto end :#判断是否存在对比快照,如不存在则不进行差异比较 :compare findstr /n "." snap.txt >tmp1.txt findstr /n "." snap_old.txt >tmp2.txt :#为snap文本加入行号 for /l %%i in (2,1,100) do findstr /r "^%%i:" tmp1.txt tmp2.txt >>tmp3.txt :#以行号为序合并tmp文件 findstr /r "1:" tmp*.txt >>差异.txt :#添加时间戳 setlocal ENABLEDELAYEDEXPANSION for /f "tokens=1* delims=:" %%i in (tmp3.txt) do if %%i==tmp1.txt (set n=%%j) else (if %%j neq !n! echo %%j>>差异.txt) endlocal :#比较文本,计算差异行及行号 del tmp*.txt :#清理临时文件 cls && echo ===========完成差异比较,请查看"差异.txt"=========== && pause end:*两行并一行,相似文本比较




C:\>BLOG initiative.yo2.cn/ C:\>hh.exe ntcmds.chm::/ntcmds.htm C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-6-21 21:25
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
willsion
高级用户




积分 793
发帖 312
注册 2004-9-2
状态 离线
『第 2 楼』:  

cmd博大精深,非穷极一生不可也。


2006-8-10 11:56
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
NeoASlan
初级用户





积分 41
发帖 16
注册 2006-10-1
状态 离线
『第 3 楼』:  

我倒认为cmd业余的时候学学,能做些辅助工作就行了。 不可太入迷啊。。。


2006-10-6 11:36
查看资料  发短消息  网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 4 楼』:  

同意楼上的看法。所以还是脚本爽些




C:\>BLOG initiative.yo2.cn/ C:\>hh.exe ntcmds.chm::/ntcmds.htm C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-10-6 19:16
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
amtf15
初级用户





积分 26
发帖 17
注册 2008-10-6
状态 离线
『第 5 楼』:  

学习了,谢谢先


2009-3-14 18:19
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
abddt
新手上路





积分 3
发帖 3
注册 2009-4-3
状态 离线
『第 6 楼』:  

不知道在说什么


2009-4-3 23:39
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: