标题: [文本处理] 批处理如何删除txt文本中特定行末尾的指定字符串 [打印本页]
作者: bat9527 时间: 2016-12-7 13:54 标题: 批处理如何删除txt文本中特定行末尾的指定字符串
本帖最后由 pcl_test 于 2016-12-10 12:51 编辑
各位大哥,请帮忙解决!
在指定目录下查找全部“.txt”格式文件,删除文本中含有“G2003”的行末尾的-1、-2、-3、-4、-5、-6、-7、-8
作者: pcl_test 时间: 2016-12-7 14:44
我不是高手,所以只好路过
作者: /zhqsystem/zhq 时间: 2016-12-7 20:52
本帖最后由 /zhqsystem/zhq 于 2016-12-8 00:46 编辑
回复 1# bat9527
- for /f "delims=" %%i in ('type "%~f1"')do (set "not="
- for /f "delims=/" %%j in ("%%i")do if /i "%%~nj"=="G2003" (
- for /f "tokens=1,* delims=-" %%j in ("%%i")do (
- for /l %%n in (1,1,8)do if "%%~nk"=="%%n" set "not=y"
- if defined not (
- echo,%%j
- )else (
- echo,%%i
- )
- )
- )
- )
复制代码
依据楼下PCL大神指点追加,都不需要变量延迟执行,注:如果变量超过占用内存极限用建立和判断临时文件方式进行
- for /l %%n in (1,1,8)do set "-%%n=y"
- for /f "delims=" %%i in ('type "%~f1"')do (
- for /f "delims=/" %%j in ("%%i")do if /i "%%~nj"=="G2003" (
- for /f "tokens=1,* delims=-" %%j in ("%%i")do (
- if defined -%%~nk (
- echo,%%j
- )else (
- echo,%%i
- )
- )
- )
- )
复制代码
作者: pcl_test 时间: 2016-12-7 22:44
回复 3# /zhqsystem/zhq
for /l %%a in (1 1 8) do set -%%a=1
可以先对-1、-2、-3、-4、-5、-6、-7、-8定义,然后只要判断每个文本中含有“G2003”的每一行的最后两位字符是否定义过进行字符串截取即可,这样就不必每次判断都让for先跑8次
作者: /zhqsystem/zhq 时间: 2016-12-8 00:46
回复 4# pcl_test
PCL大神还在岗位坚守啊!
很少用变量方式,都快忘了,处理速度快了不少
作者: codegay 时间: 2016-12-8 02:54
正则替换就一行啊。
作者: codegay 时间: 2016-12-8 02:58
(G2003.+ )(.+)-[1-8]$
\1\2
作者: Nsqs 时间: 2016-12-8 06:59
用正则秒杀一切算法,高效方便
作者: bat9527 时间: 2016-12-8 12:02
回复 3# /zhqsystem/zhq
大神,怎样设定目录为在“D:\test\”下,全部“.txt”格式文件?
我们的大神,完整代码是?
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |