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

[文本处理] [已解决]求助批处理删除TXT文本 书名号之外的内容

当前文件夹内00.txt文件,文本内容若干行,删除每行书名号《》之外的内容,每行只有一个《》,输出最好是修改原文件
示例:
10《一场梦一场秋雨》20句
162《远方的人》长短
20《曾经来过》保留
处理后
《一场梦一场秋雨》
《远方的人》
《曾经来过》
1

评分人数

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

编码全部ansi
运行后会生成新文件OO.txt
  1. @echo off&chcp 936
  2. (
  3. for /f "eol=? delims=" %%a in (00.txt) do (
  4. set "line=%%a"
  5. setlocal enabledelayedexpansion
  6. set line=《!line:*《=!
  7. for /f "tokens=1 delims=》" %%b in ("!line!") do (
  8. endlocal
  9. set "line=%%b》"
  10. )
  11. if "!nil!" == "%nil%" endlocal
  12. setlocal enabledelayedexpansion
  13. echo:!line!
  14. endlocal
  15. ))>>OO.txt
  16. echo done!!!
  17. pause&exit/b
复制代码
1

评分人数

TOP

针对楼主所说每行只有一组《》,可用这段代码试下(ASCII)
bat和txt放同一路径下直接运行
  1. @echo off&chcp 65001
  2. for /f "tokens=1,2,3 delims=《》" %%a in (00.txt) do echo 《%%b》>>新文件.txt
复制代码

TOP

本帖最后由 aloha20200628 于 2024-10-27 19:16 编辑

回复 1# lj670

cmd窗口一行流》须在本坛第三方下载 sed.exe http://bcn.bathome.net/s/tool/index.html?key=sed 置于 00.txt 同目录运行...
  1. sed -r "s/[^《》]*《([^《》]+)》[^《》]*/《\1》/g" 00.txt
复制代码

TOP

回复 4# aloha20200628 下载4.9版sed,bat和文本为ANSI,运行一闪而过没有作用。

TOP

回复 3# 银八 运行后文本只有《》了,书名号里的文字也没有了

TOP

回复 2# Five66 运行后生成的新文件是对的,请问大神能否直接修改原文件呢?

TOP

  1. @echo off
  2. rem 批处理和文本全部保存为ansi编码
  3. cd /d "%~dp0"
  4. (for /f "useback delims=" %%a in ("00.txt") do (
  5. for /f "tokens=2 delims=《》" %%b in ("#%%a#") do (
  6. echo 《%%b》
  7. )
  8. )) > $
  9. move $ "00.txt"
  10. pause
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

回复 8# 77七 运行后,完美,谢谢!

TOP

回复 5# lj670

已用一楼的示例文件 00.txt 测试通过... 楼主用以下代码能看见屏显的正确结果吗?
  1. sed -r "s/[^《》]*《([^《》]+)》[^《》]*/《\1》/g" "00.txt"&echo,&pause
复制代码

TOP

回复 10# aloha20200628 频显是对的,但没有输出,原文件没变

TOP

本帖最后由 aloha20200628 于 2024-10-27 23:07 编辑

回复 11# lj670

还是用一行流解决吧...
  1. sed -r "s/[^《》]*《([^《》]+)》[^《》]*/《\1》/g" "00.txt">"_" & move /y "_" "00.txt"
复制代码

TOP

回复 12# aloha20200628 这个完美!!👍👍

TOP

  1. @echo off
  2. (for /f "tokens=1-2 delims=《》" %%a in (00.txt) do if "%%b"=="" (echo,《%%a》) else echo,《%%b》)>temp
  3. del 00.txt
  4. ren temp 00.txt
  5. pause
复制代码
1

评分人数

TOP

回复 12# aloha20200628

尝试用-i参数,看是不是可简化如下
[code]
sed -i -r "s/^.*(《.*》).*$/\1/" 00.txt
1

评分人数

TOP

返回列表