标题: [文本处理] [分享]批处理删除带括号的行的第二列 [打印本页]
作者: 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- @echo off
- cd /d "%~dp0"
- (for /f "tokens=1,2* delims=()" %%i in ('type "a.nc"') do (
- if "%%j" neq "" (
- for /f %%a in ("%%i") do (
- echo,%%a %%j
- )
- ) else (
- echo,%%i %%j
- )
- ))>"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- @echo off
- cd /d "%~dp0"
- setlocal enabledelayedexpansion
- (for /f "delims=" %%i in ('type "a.nc"') do (
- set "str=%%i"
- if "!str:(=!" neq "%%i" (
- for /f "tokens=1,3 delims=()" %%a in ("%%i") do (
- echo,%%a %%b
- )
- ) else (
- echo,%%i
- )
- ))>"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
括号在任意位置,删除前一列内容并去除括号(就是有点乱):- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in (a.nc) do (
- set "str=%%i"
- set str1=
- set str2=
- set str3=
- if not "!str:)=!" == "%%i" (
- for %%a in (%%i) do (
- set str1=%%a
- if "!str1:)=!"=="%%a" (
- if defined str2 (
- if not defined str3 (
- set str3=!str2!
- ) else (
- set str3=!str3! !str2!
- )
- )
- )
- set str2=%%a
- )
- if not defined str3 (
- set str=!str2!
- ) else (
- set str=!str3! !str2!
- )
- set "str=!str:(=!"
- set "str=!str:)=!"
- )
- echo,!str!
- )
- pause
复制代码
作者: qixiaobin0715 时间: 2022-5-7 12:48
还有更简单点的:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in (a.nc) do (
- set str=
- set "str1=%%i"
- set "str1=!str1: (=(!"
- for %%a in (!str1!) do (
- set "str2=%%a"
- set "str2=!str2:*(=!"
- set "str2=!str2:)=!"
- if not defined str (
- set str=!str2!
- ) else (
- set str=!str! !str2!
- )
- )
- echo,!str!
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |