![]() 支柱会员
|
cmd凑热闹来了,试排下,设
http://bbs.et8.net/bbs/showthread.php?t=651683 2楼文本为url.txt url_sort.cmd @echo off del 完成.txt tmp.txt sort.txt 2>nul setlocal ENABLEDELAYEDEXPANSION for /f "tokens=1* delims=:" %%i in (url.txt) do if "%%i"=="http" (echo %%i%%j;!n! >>tmp.txt) else set n=%%i endlocal sort tmp.txt>sort.txt for /f "tokens=1,* delims=;" %%i in (sort.txt) do @(echo %%i >>完成.txt && echo %%j >>完成.txt && echo. >>完成.txt) 此帖于 2005-04-30 12:23:07 被 hitme 编辑. . |
||
![]() 『软件使用』版主
|
引用:
最后的for 循环里面多加一个echo输出空行才是最后结果。 ![]() 还有说说在文件编辑器中怎么做? 此帖于 2005-04-19 14:11:58 被 lyh728 编辑. . |
|||
![]() 支柱会员
|
cmd中一些符号的说明:
& 最简单的组合命令,作用是连接n个命令,按顺序执行,不管是否有执行失败。 a & b #依次执行a,b && 组合命令,与&命令不同之处在于,判断是否有执行失败,如失败将不继续执行剩下的命令。 a && b #a成功,b执行 || 作用与&&相反 a || b #a失败,b执行 连着用a && b || c,表示a成功,则执行b,b失败,则执行c >、>> 输出重定向命令,将命令的输出写入到一个文件中。 区别:>覆盖写入,>>尾部追加写入 echo a>a.txt find /v "" *.txt >list.txt | 管道命令,前一命令的输出作为后一命令的输入,常用于文本过滤操作 dir | find "hitme.exe" |
||
![]() 支柱会员
|
引用:
![]() 引用:
![]() 引用:
解决思路是两行并一行(结合),sort(xx),好合好散(天亮了) 此帖于 2005-04-19 14:33:48 被 hitme 编辑. . |
|||||
![]() 支柱会员
|
cmd下的一些文件处理:
============================================== 1.保持文件夹结构,copy特定大小,时间,类型文件 2.保持文件夹结构,copy文件名,内容空 3.按文件数量移动文件到目标目录 4.copy某层(3..4..5)子目录下的文件到目标路径 5.删除文件夹中非某扩展名(如txt)的文件 6.copy不同文件夹下的同名文件到目标文件夹 7.同一文件copy到所有子文件夹中 8.处理所有扩展名为e??且不是exe的文件 9.每个文件生成一个同名文件夹,然后把各个文件拷贝到同名文件夹中 10.删除空文件夹 ============================================== 1.保持文件夹结构,copy特定大小,时间,类型文件 #特定类型 xcopy /s/y *.exe 目标路径 *很多单独的命令(dir;xcopy等)自身就富有变化,善用之 #特定大小 (例如小于50000字节,具体运算符号:EQU - 等于 NEQ - 不等LSS - 小于 LEQ - NEQ - 不等于) for /r %i in (*.*) do if %~zi lss 50000 xcopy /s "%i" 目标路径"%~pi" *出动循环武器for命令,可与众多命令搭配使用,例如if,findstr,echo等等 *这里用它枚举子文件夹下的文件,%~zi扩冲为文件大小,交给if命令进行比较运算,成功后xcopy至目标路径并copy文件夹 *for命令执行顺序 ![]() #特定时间 例:拷贝特定时间(2005-04-19)的文件,以下内容保存为.bat文件执行 代码:
setlocal ENABLEDELAYEDEXPANSION for /r %%i in (*.*) do set dd=%%~ti && if "!dd:~0,8!"=="05-04-19" xcopy /s "%%i" 目标路径"%%~pi" endlocal *%var~:0,8%扩展的说明:两个数字表示偏移量和长度,具体参看set /? *关于ENABLEDELAYEDEXPANSION延迟环境变量扩充,参看set /?,有实例说明 ----------------------------------------------- 2.保持文件夹结构,copy文件名,内容空 xcopy /t/s *.* 目标路径 for /r %i in (*.*) do echoc >目标路径"%~pnxi" *xcopy /t/s建立镜象文件夹,for /r in (*.*)枚举子文件夹中的文件,利用echoc的bug,写入0字节文件 ----------------------------------------------- 3.按文件数量移动文件到目标文件夹,以下内容保存为.bat文件执行 代码:
setlocal ENABLEDELAYEDEXPANSION set /a n=0 :loop set /a n=n+1 md 文件夹%n% for %%i in (*.*) do move "%%i" 文件夹%n% & dir 文件夹%n% | findstr /c:"100 个文件" && goto loop endlocal *for (*.*) do move一个 && 查找是否有100个了 && 找到跳出去,移动下100个 ----------------------------------------------- 4.copy某层(3..4..5)子目录下的文件到目标路径 #复制第3层文件夹下的文件到目标路径 dir /s/b/a ![]() for /f "tokens=1-4 delims=\" %i in (d.txt) do echo n | xcopy /e "%i\%j\%k\%l" 目标路径 *dir 列出没有标题信息或摘要的子文件夹,并重定向到d.txt *for /f ..(d.txt),分析d.txt,交xcopy复制 *也可以直接用for /f ..('dir /s/b/a ![]() ----------------------------------------------- 5.删除文件夹中非某扩展名(如txt)的文件 for /f "delims=/" %i in ('dir /b/s *.*') do dir /b/s *.txt | find "%i" || del "%i" *抓dir *.*的输出,在dir *.txt输出中查找,没找到则不是txt文件,删除之 *可扩充为非txt+jpg+gif的文件,不会眼花了 ----------------------------------------------- 6.copy不同文件夹下的同名文件到目标文件夹 文件夹1下面有一个文件123.jpg 文件夹2下面也有一个文件123.jpg,文件名相同,内容不同 文件夹3下面也有一个文件123.jpg,文件名相同,内容不同 …… 我想搜索所有的文件123.jpg,copy到一个目标文件夹下,但是我用搜索->复制,出现后者覆盖前者的问题,只能保留一个文件123.jpg,有没有 办法把这些同名文件拷贝到相同文件夹下?或者是说如何自动重命名搜索到的文件? dir /s/b 123.jpg | find /n "123.jpg" >temp.txt for /f "tokens=1,2 delims=[]" %i in (temp.txt) do copy "%j" d:\123-"%i".jpg *枚举所有123.jpg文件的完整路径,并加上行号重定向到temp.txt *for /f () do copy 同时重命名为123_行号.jpg,行号不会重复,利用一下 ----------------------------------------------- 7.同一文件copy到所有子文件夹中 for /r %a in (.) do xcopy /y filename "%~pa" *for /r ..(.) do 只枚举文件夹 ----------------------------------------------- 8.处理所有扩展名为e??且不是exe的文件 for %i in (*.e??) do if /i "%~xi" neq ".exe" echo %i ----------------------------------------------- 9.每个文件生成一个同名文件夹,然后把各个文件拷贝到同名文件夹中 for %i in (*.*) do md "%~ni" && copy %i "%~ni" ------------------------------------------------ 10.删除空文件夹 for /l %a in (1,1,9) do for /r %i in (.) do rd %~si 此帖于 2005-04-21 10:13:12 被 hitme 编辑. . |
||
![]() 『软件使用』版主
|
引用:
1 先合并, 2 把http放到前面, 3 排序 4 倒转http到后面 5 分割 |
|||
![]() 热心会员
|
看得头都大了:qqb012:
还是用高级工具吧…… 我最喜欢把文本导入SQL Server进行排序、删除重复项了 哈哈:qqb007: |
||
![]() 我翻开历史一查,这历史没有年代,歪歪斜斜的每叶上都写着“仁义道德”几个字。我横竖睡不着,仔细看了半夜,才从字缝里看出字来,满本都写着两个字是“吃人”! |
![]() 『软件使用』版主
|
引用:
|
|||
![]() 支柱会员
|
支持一把。很多时候用命令行有四两拔千斤的感觉。
|
||
![]() 支柱会员
|
这样排序工程太浩大了吧
![]() ![]() 引用:
|
|||
![]() 超级会员
|
支持。现在自动检测邮件服务器是否正常就是用批处理。呵呵,,简单,实用。
|
||
![]() 热心会员
|
hitme 真的 你写书去吧
"All References for Windows Command" PS 我觉得写一个JAVA程序就可以实现了. |
||
![]() 热心会员
|
强人啊强人。。
|
||
![]() 待认证激活
|
这个贴超强,佩服佩服!:qqb003:
|
||
![]() NearbyFeed基于地点的社交网络iPhone和Android应用程序,欢迎到App Store和Android Market下载使用nearbyfeed.com |
![]() 支柱会员
|
cmd下的一些文本处理
开头跑个题,插播个广告,隆重推出,铛铛铛铛~~~,excel!excel!excel! m$那个电子表格软件?提它做什么?这题太跑了吧? 做行文本处理!排序,过滤,中间插入,翻个身,倒个个,奇偶行交换,抽取1,4,9..行,合并,交叉合并,首行填充奇数行,等等72变 相比xnix shell,各种文本编辑软件,决不逊色,入门还更容易,帮助文件更为详尽,实为居家旅行,杀人越货的强手货,没有概念的赶紧试用。 使用时需要的仅仅是个思路。思路..思路很重要! 言归正传,还是cmd,用它做文本处理,只能算是勉为其难,凑合着用吧,常做深呼吸,小心给"憋"着了 ==================================================================== 1.列表多个文本文件文件名+文件内容 2.构造001.txt 002.txt 999.txt 文本内容分别是text001 text002 3.构造http://..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.构造http://..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 *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 ------------------------------------------------------------ 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 ------------------------------------------------------------ 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的固定内容 有以下内容 http://www.abcd.com/pub/wrok1.html http://www.abcd.com/pub/wrok2.html http://www.abcd.com/pub/wrok3.html . .. ... http://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: 此帖于 2005-04-26 12:05:56 被 hitme 编辑. . |
||