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

[文本处理] [已解决]批处理怎么删除不同文件夹中的文本文件中的#连同#之内的字符与文本#?

[复制链接]
发表于 2023-11-27 16:49:39 | 显示全部楼层
也来个纯P,尽量处理特殊字符吧

  1. @echo off
  2. for /f "delims=" %%f in ('dir/b/s/a-d *.txt') do (
  3.      (for /f "usebackq tokens=1* delims=#" %%i in ("%%f") do (
  4.            set "str=%%i"
  5.            set "s=%%j"
  6.            if "%%j" neq "" (
  7.                call :loop
  8.                setlocal enabledelayedexpansion
  9.                echo !str!
  10.                endlocal
  11.           ) else echo %%i
  12.      ))>"New_%%~nf.tx"
  13. )
  14. pause
  15. exit
  16. :loop
  17. if "%s%" == ""  goto :eof
  18. for /f "tokens=2* delims=#" %%i in ("%s%") do (
  19.      set "t=%%i"
  20.      set "s=%%j"
  21.      setlocal enabledelayedexpansion
  22.      if "!t: =!" neq "" set "str=!str!!t!"
  23.      for /f "delims=" %%a in ("!str!") do endlocal&set "str=%%a"
  24.      call :loop
  25. )
复制代码
第三方gawk 处理子目录 要加FOR
  1. gawk "{gsub(/#[^#]*#/, ""); print >>FILENAME"NEW_tx"}" *.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
77七 + 1 感谢分享

查看全部评分

发表于 2023-11-27 18:00:29 | 显示全部楼层

订正了15楼代码。其中jscript和python脚本因均以文件而非行作为处理单位,故可有效解析定界符内容被断行的情况。
发表于 2023-11-28 02:35:30 | 显示全部楼层
本帖最后由 Five66 于 2023-11-28 06:34 编辑

来个偷懒的,保存为ansi编码的bat
仅处理当前路径中文件夹里的文本文件
要求文本文件编码为gbk,文件名不要有英文百分号或936代码页无法显示的字符,还有文本中如果包含^可能会被吞
改了下,已最大程度支持特殊字符(大概)

  1. @echo off&chcp 936 >nul

  2. for /d %%a in (*) do (
  3. for /f "delims=" %%b in ('dir /b /s /a-d "%%a\*.txt"') do (
  4. setlocal
  5. for /f "delims=" %%c in ('findstr /n .* "%%b"') do (
  6. set "line=%%c"
  7. setlocal enabledelayedexpansion
  8. if "!line:*:=!" == "" (endlocal&echo,) else (
  9. set "line=!line:*:=!"
  10. for /f "delims=" %%i in ("$!line:#=^#!") do endlocal&set "line=%%i"
  11. set o=
  12. call :aaa
  13. )
  14. )
  15. endlocal
  16. )>"%%~dpb_new_%%~nxb"
  17. )
  18. pause&exit/b

  19. :aaa
  20. setlocal enabledelayedexpansion
  21. set "line=!line:~1!"
  22. for /f "tokens=1* delims=^" %%x in ("$!line!") do (
  23. endlocal&set line=&set "tk1=%%x"&set "tk2=%%y"
  24. )
  25. setlocal enabledelayedexpansion
  26. set "tk1=!tk1:~1!"
  27. if "!tk1:~0,1!" == "#" (
  28. if "!tk2:~0,1!" == "#" (set "line=!tk2:~1!") else set "o=!o!!tk1!"&set "line=!tk2!"
  29. ) else (
  30. set "o=!o!!tk1!"
  31. set "line=!tk2!"
  32. )
  33. if defined line (
  34. for /f "delims=" %%i in ("$!line!") do (
  35. for /f "delims=" %%j in (""!o!"") do endlocal&set "line=%%i"&set "o=%%~j"
  36. )
  37. goto :aaa
  38. ) else echo,!o!&endlocal
  39. goto :eof
复制代码
发表于 2023-11-28 14:15:47 | 显示全部楼层
本帖最后由 aloha20200628 于 2023-11-28 14:25 编辑


一楼示例中没有那些 ^&!%()<\|/> 等特殊字符作祟,故15楼的纯P代码可以应付,当然 jscript/python/sed 等解决方案可以对此无惧。
若真要考虑纯P解法能处理上述特殊字符,还须订正其中的代码(包括字符串长度获取函数)如下》

按一楼示例原意顺便改写一个包含特殊字符的测试样本 test.txt:
'~^&!%(#将被删除#)<\|/>
'~^&!%()<\|/>#将被删除#
#将被删除#'~^&!%()<\|/>

  1. @echo off
  2. for /f "delims=" %%F in ('dir/b/s/a-d *.txt') do (
  3.         (for /f "usebackq delims=" %%s in ("%%~F") do (
  4.                 set s=%%~s
  5.                 setlocal enabledelayedexpansion
  6.                 set "cut=-1" &set "_s=" &(call :_strLen s sL)
  7.                 for /L %%i in (0,1,!sL!) do (
  8.                         set "c=!s:~%%i,1!"
  9.                         if "!c!" neq "#" (if !cut! equ -1 set "_s=!_s!!c!") else (set/a "cut=0-!cut!")
  10.                 )
  11.                 (echo,!_s!)
  12.                 endlocal
  13.         ))>"%%~F.new"
  14. )
  15. endlocal &exit/b

  16. :_strLen //获取字符串长度(须先开启变量延迟可保全^!等特殊字符) %1=被测字符串变量名 %2=返回值变量名
  17.         set "_str=_!%~1!" &set "Len=0"
  18.         for %%n in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
  19.                 if "!_str:~%%n,1!" neq "" (set/a "Len+=%%n"&set "_str=!_str:~%%n!")
  20.         )
  21.         set/a "%~2=!Len!-1" &exit/b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 22:21 , Processed in 0.017242 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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