Board logo

标题: [文本处理] [分享]批处理删除带括号的行的第二列 [打印本页]

作者: Batcher    时间: 2022-4-30 18:10     标题: [分享]批处理删除带括号的行的第二列

【问题描述】
保留括号内的,删除前面的t0 t1 t2


作者: Batcher    时间: 2022-4-30 18:10

【解决方案】

test_1.bat 请参考Q-04和Q-05把bat文件和nc文件都保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
  1. @echo off
  2. cd /d "%~dp0"
  3. (for /f "tokens=1,2* delims=()" %%i in ('type "a.nc"') do (
  4.     if "%%j" neq "" (
  5.         for /f %%a in ("%%i") do (
  6.             echo,%%a %%j
  7.         )
  8.     ) else (
  9.         echo,%%i %%j
  10.     )
  11. ))>"b.nc"
复制代码

作者: Batcher    时间: 2022-4-30 18:10

test_2.bat 请参考Q-04和Q-05把bat文件和nc文件都保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. (for /f "delims=" %%i in ('type "a.nc"') do (
  5.     set "str=%%i"
  6.     if "!str:(=!" neq "%%i" (
  7.         for /f "tokens=1,3 delims=()" %%a in ("%%i") do (
  8.             echo,%%a %%b
  9.         )
  10.     ) else (
  11.         echo,%%i
  12.     )
  13. ))>"b.nc"
复制代码

作者: yyz219    时间: 2022-5-1 10:07

回复 3# Batcher


    感谢分享
作者: luyigoog    时间: 2022-5-1 15:31

不错,学习了。
作者: xyh9999    时间: 2022-5-1 16:58

学习了。
作者: xyh9999    时间: 2022-5-1 16:58

本帖最后由 xyh9999 于 2022-5-1 17:00 编辑

学习了。   感谢。

不过如果括号内容不在第3个词的位置怎么办?譬如是如下形式:
a.txt的内容如下:
abc1 abc2  t0 (t2)
abab cd1 123 456 abdj
cde1 t5 (t1)
hahh 19922k ksdss
...

将a.txt中带括号的内容去掉括号,并将括号前的那个词删除,以上处理后的结果应该是a1.txt的样子:
a1.txt的内容如下:
abc1 abc2 t2
abab cd1 123 456 abdj
cde1 t1
hahh 19922k ksdss
...
作者: aloha20200628    时间: 2022-5-1 19:16

@echo off
setlocal enabledelayedexpansion
(for /f "usebackq tokens=1-2 delims=()" %%1 in ("a.txt") do (
      if "%%2" == "" (echo,%%1) else (
          set "a=%%1"
          for /f "delims=" %%F in ("!a: =.!") do (
              set "b=%%~nF"
              echo,!b:.= ! %%2)
      )
))>"a1.txt"
作者: xyh9999    时间: 2022-5-1 21:11

回复 8# aloha20200628


    好好学习,太巧妙了。     把它当扩展名舍掉了,太巧妙了!PFPF
作者: qixiaobin0715    时间: 2022-5-6 10:43

本帖最后由 qixiaobin0715 于 2022-5-7 14:20 编辑

回复 7# xyh9999
括号在任意位置,删除前一列内容并去除括号(就是有点乱):
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (a.nc) do (
  4.     set "str=%%i"
  5.     set str1=
  6.     set str2=
  7.     set str3=
  8.     if not "!str:)=!" == "%%i" (
  9.         for %%a in (%%i) do (
  10.             set str1=%%a
  11.             if "!str1:)=!"=="%%a" (
  12.                 if defined str2 (
  13.                     if not defined str3 (
  14.                         set str3=!str2!
  15.                     ) else (
  16.                         set str3=!str3! !str2!
  17.                     )
  18.                 )
  19.             )
  20.             set str2=%%a
  21.         )
  22.         if not defined str3 (
  23.             set str=!str2!
  24.         ) else (
  25.             set str=!str3! !str2!
  26.         )
  27.         set "str=!str:(=!"
  28.         set "str=!str:)=!"
  29.     )
  30. echo,!str!
  31. )
  32. pause
复制代码

作者: qixiaobin0715    时间: 2022-5-7 12:48

还有更简单点的:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (a.nc) do (
  4.     set str=
  5.     set "str1=%%i"
  6.     set "str1=!str1: (=(!"
  7.     for %%a in (!str1!) do (
  8.         set "str2=%%a"
  9.         set "str2=!str2:*(=!"
  10.         set "str2=!str2:)=!"
  11.         if not defined str (
  12.             set str=!str2!
  13.         ) else (
  14.             set str=!str! !str2!
  15.         )
  16.     )
  17.     echo,!str!
  18. )
  19. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2