Board logo

标题: [文本处理] 批处理如何删除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
  1. for /f "delims=" %%i in ('type "%~f1"')do (set "not="
  2. for /f "delims=/" %%j in ("%%i")do if /i "%%~nj"=="G2003" (
  3.   for /f "tokens=1,* delims=-" %%j in ("%%i")do (
  4.    for /l %%n in (1,1,8)do if "%%~nk"=="%%n" set "not=y"
  5.    if defined not (
  6.     echo,%%j
  7.    )else (
  8.     echo,%%i
  9.    )
  10.   )
  11. )
  12. )
复制代码

依据楼下PCL大神指点追加,都不需要变量延迟执行,注:如果变量超过占用内存极限用建立和判断临时文件方式进行
  1. for /l %%n in (1,1,8)do set "-%%n=y"
  2. for /f "delims=" %%i in ('type "%~f1"')do (
  3. for /f "delims=/" %%j in ("%%i")do if /i "%%~nj"=="G2003" (
  4.   for /f "tokens=1,* delims=-" %%j in ("%%i")do (
  5.    if defined -%%~nk (
  6.     echo,%%j
  7.    )else (
  8.     echo,%%i
  9.    )
  10.   )
  11. )
  12. )
复制代码

作者: 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://bbs.bathome.net/) Powered by Discuz! 7.2