批处理脚本删除多个文件中的特定行

时间:2017-12-17 13:52:47

标签: batch-file lines

我正在寻找可以从文本文件中删除特定行的脚本或程序(input.001.log ..... input.log.1900),文件大小为50MB,我有大约2k文件。在每一行都有一个字符串,我想用双字符删除每一行" aa" " BB"等等,每行都有超过5个数字,每一行都有一个特殊的字符,除了@#&并且每行都有超过2个特殊字符(比如@ bcd#38s#需要删除此行)

作为一个注释,我没有任何编程技能,只有很少的批处理脚本经验。

到目前为止,我正在使用此代码:

@ECHO OFF 
SETLOCAL 
FOR %%i IN (input.txt) DO ( 
 TYPE "%%i"|FINDstr /l /v "aa bb cc dd ff gg hh ii jj kk ll mm nn pp qq rr ss tt uu vv xx yy zz" >"input_1.txt" 
) 
GOTO :EOF

1 个答案:

答案 0 :(得分:0)

如果批处理具有合适的正则表达式实用程序,那么这将很容易,但FINDSTR is extremely limited and buggy。但是,FINDSTR可以相当有效地解决这个问题而不会有太多困难。

你对“特殊性格”的含义并不十分清楚。我的解释是,您只想接受字母字符a-zA-Z,数字0-9以及特殊字符@#& 。我只能猜测你正在构建潜在密码字典。

如果您构建表示各种字符类的环境变量以及各种逻辑表达式,然后使用搜索字符串中的变量,我会发现此问题更容易。

我建议您将修改后的文件写入新文件夹。

@echo off
setlocal

set "alpha=abcdefghijklmnopqrstuvwxyz"
set "num=0123456789"
set "sym=@#&"

set "dups=aa bb cc dd ee ff gg hh ii jj kk ll mm nn oo pp qq rr ss tt uu vv ww xx yy zz 00 11 22 33 44 55 66 77 88 99 @@ ## &&"
set "bad=[^%alpha%%num%%sym%]"
set "num6=[%num%][^%num%]*[%num%][^%num%]*[%num%][^%num%]*[%num%][^%num%]*[%num%][^%num%]*[%num%]"
set "sym3=[%sym%][^%sym%]*[%sym%][^%sym%]*[%sym%]

set "source=c:\your\source\folder"
set "destination=c:\your\destination\folder"

for %%F in ("%source%\*.txt") do findstr /riv "%dups% %bad% %num6% %sym3%" "%%F" >"%destination%\%%~nxF"

编辑以回应Magoo的评论

如果您在Windows XP上运行,则必须稍微修改一下该解决方案,因为它的正则表达式长度限制为127个字节,并且%num6%表达式超出了该限制。

如果将num6更改为

,解决方案应该适用于XP
set "num6=[%num%].*[%num%].*[%num%].*[%num%].*[%num%].*[%num%]"

该搜索在逻辑上给出相同的结果,但效率明显较低,因为在匹配过程中可能需要过多的回溯。