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

[文本处理] [分享]批处理删除带括号的行的第二列

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

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

【解决方案】

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"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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"
复制代码
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3# Batcher


    感谢分享
我是小白,希望老师多多帮助

TOP

不错,学习了。

TOP

学习了。

TOP

本帖最后由 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
...

TOP

@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"

TOP

回复 8# aloha20200628


    好好学习,太巧妙了。     把它当扩展名舍掉了,太巧妙了!PFPF

TOP

本帖最后由 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
复制代码

TOP

还有更简单点的:
  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
复制代码

TOP

返回列表