[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
第一个问题和第二个问题
只能处理ansi编码文本。
:
  1. @echo off
  2. for /f "delims=:" %%i in ('findstr /ni "</tabID>" a.txt') do set /a h=%%i
  3. ((for /f "delims=" %%i in ('findstr /n .* a.txt') do (
  4.    set "str=%%i"
  5.    for /f "delims=:" %%a in ("%%i") do set /a i=%%a
  6.    setlocal enabledelayedexpansion
  7.    set "str=a!str:*:=!"
  8.    set "num=a!num:*:=!"
  9.    if "!str!"=="a" (echo;) else (
  10.       set var=!str: =!
  11.       if "!var!"=="a" (echo;) else (
  12.          if "!str!"=="a<MATab>" (
  13.             if not "!str!"=="!num!" echo;^<MATab^>
  14.          ) else (
  15.             set str=!str:~1!
  16.             if !h! neq !i! (
  17.                echo !str:^</tabID^>=!
  18.              ) else echo !str!
  19.          )
  20.       )
  21.     )
  22.     endlocal
  23.     set "num=%%i"
  24. ))>tem.txt
  25. start tem.txt
复制代码
技术问题请到论坛发帖求助!

TOP

第一问:
  1. Dim fso, vbstr, regex
  2. Set fso = CreateObject("scripting.filesystemobject")
  3. vbstr = fso.OpenTextFile("a.txt", 1).ReadAll()
  4. Set regex = New RegExp
  5. regex.Global = True
  6. regex.Pattern = "([.\s]+)<MATab>[\s]+<MATab>([.\s]+)"
  7. vbstr = regex.Replace(vbstr, "$1<MATab>$2")
  8. fso.OpenTextFile("a.txt", 2, 1).Write vbstr
  9. Set fso = Nothing
  10. Set regex = Nothing
  11. MsgBox "ok"
复制代码
***共同提高***

TOP

本帖最后由 tmplinshi 于 2011-5-29 11:03 编辑
  1. @echo off
  2. rem 在这里设置要修改的文件
  3. set file="a.txt"
  4. set temp_file="%temp%\.tmp.%random%"
  5. set /a tag_num = 0, dup_line = 0
  6. rem 查找“</tabID>”的个数
  7. find /c /i "</tabID>" <%file% >%temp_file%
  8. set /p tag_num=<%temp_file%
  9. if %tag_num% gtr 2 set /a tag_num += 1
  10. rem 为了保留空行
  11. findstr /n .* %file% >%temp_file%
  12. (for /f "usebackq delims=" %%a in (%temp_file%) do (
  13.     set str=%%a
  14.     SetLocal EnableDelayedExpansion
  15.     set str= !str:*:=!
  16.     if /i "!str: =!" == "<MATab>" (
  17.         set /a dup_line += 1
  18.     ) else (
  19.         set dup_line=0
  20.         if !tag_num! gtr 2 (
  21.             if /i "!str:</tabID>=!" neq "!str!" (
  22.                 set "str=!str:</tabID>=!"
  23.                 set /a tag_num -= 1
  24.             )
  25.         )
  26.     )
  27.     if !dup_line! leq 1 echo,!str:~1!
  28.     for /f "tokens=1,2" %%a in ("!tag_num! !dup_line!") do (
  29.         EndLocal
  30.         set tag_num=%%a
  31.         set dup_line=%%b
  32.     )
  33. )) >%file%
  34. del %temp_file%
复制代码

TOP

本帖最后由 batman 于 2011-5-29 18:33 编辑

第二问:
  1. Dim fso, vbstr, vbout
  2. Set fso = CreateObject("scripting.filesystemobject")
  3. vbstr = fso.OpenTextFile("a.txt", 1).ReadAll()
  4. Dim str, stra
  5. If UBound(Split(vbstr, "</tabID>")) < 3 Then stra = "</tabID>"
  6. For i = 0 To UBound(Split(vbstr, "</tabID>"))
  7.   If i = UBound(Split(vbstr, "</tabID>")) - 1 Then
  8.     vbout = vbout & Split(vbstr, "</tabID>")(i) & "</tabID>"
  9.     Else
  10.     vbout = vbout & Split(vbstr, "</tabID>")(i) & stra
  11.   End If
  12. Next
  13. fso.OpenTextFile("a.txt", 2, 1).Write vbout
  14. Set fso = Nothing
  15. MsgBox "ok"
复制代码
ps:昨天是老妈生日,所以没能及时回复。。。
***共同提高***

TOP

抱歉来晚了

bat似乎对utf8文本完全不起作用

我试过超级版主的vbs

但是只能在本地编码作用,vbs改成utf8编码就完全不能执行

请问该怎么办谢谢

TOP

不能简单地改文件格式啊,要用转码工具转码
***共同提高***

TOP

所以批处理碰上编码是无解@@

TOP

本帖最后由 tmplinshi 于 2011-5-31 08:32 编辑

代码中用到了编码转换工具 iconv。iconv 下载地址:
http://bathome.net/thread-10861-1-2.html
  1. @echo off
  2. rem 在这里设置要修改的文件
  3. set file="4.htm"
  4. set temp_file="%temp%\.tmp.%random%"
  5. set /a tag_num = 0, dup_line = 0
  6. rem 查找“</tabID>”的个数
  7. find /c /i "</tabID>" <%file% >%temp_file%
  8. set /p tag_num=<%temp_file%
  9. if %tag_num% gtr 2 set /a tag_num += 1
  10. iconv -f utf-8 -t gbk -c %file% | findstr /n .* >%temp_file%
  11. (for /f "usebackq delims=" %%a in (%temp_file%) do (
  12.     set str=%%a
  13.     SetLocal EnableDelayedExpansion
  14.     set str= !str:*:=!
  15.     if /i "!str: =!" == "<MATab>" (
  16.         set /a dup_line += 1
  17.     ) else (
  18.         set dup_line=0
  19.         if !tag_num! gtr 2 (
  20.             if /i "!str:</tabID>=!" neq "!str!" (
  21.                 set "str=!str:</tabID>=!"
  22.                 set /a tag_num -= 1
  23.             )
  24.         )
  25.     )
  26.     if !dup_line! leq 1 echo,!str:~1!
  27.     for /f "tokens=1,2" %%a in ("!tag_num! !dup_line!") do (
  28.         EndLocal
  29.         set tag_num=%%a
  30.         set dup_line=%%b
  31.     )
  32. )) >%file%
  33. iconv -f gbk -t utf-8 %file% >%temp_file%
  34. move %temp_file% %file%
复制代码

TOP

不好意思

我再上传一次文本

给大哥们测试看看

我的文本一定要是utf8才能在软件上运行

一但不是utf8就不能使用

可是批处理无法对utf8作处理@@

TOP

24# leo198444


测试了 23 楼的代码吗?

TOP

24# leo198444


测试了 23 楼的代码吗?
tmplinshi 发表于 2011-5-31 08:27


你好,谢谢你

我已经试过了

但是毫无作用

TOP

返回列表