标题: [文本处理] [已解决]批处理如何过滤给定字符中的某一个出现两次以上的行 [打印本页]
作者: lxzzr 时间: 2011-11-10 15:39 标题: [已解决]批处理如何过滤给定字符中的某一个出现两次以上的行
如,给定字符set "str=enun wizard abc test",过滤掉类似:enunenunabc、enunabcenun、testwizardwizard这样的行?
能达到目的就行,代码效率第一,其它其次,大家帮忙想想办法
作者: CrLf 时间: 2011-11-10 15:55
本帖最后由 CrLf 于 2011-11-10 17:26 编辑
- @echo off&setlocal enabledelayedexpansion
- set "str= enun wizard abc test "
- for %%a in (!str!) do set "str=!str: %%a = %%a.*%%a !"
- ::如果要增强对特殊字符的兼容性,则使用 set "var=!var! %%a.*%%a" 设置变量,下文也改用 "!var:\=\\!"
- for %%a in (\ ^" [ ] ^^ ^$) do set "str=!str:%%a=\%%a!"
- findstr /v "!str:.=\.!" 1.txt
- pause
复制代码
作者: lxzzr 时间: 2011-11-10 16:15
本帖最后由 lxzzr 于 2011-11-10 16:16 编辑
回复 2# CrLf
没效果呀,老兄,一楼给出了示例文本
作者: CrLf 时间: 2011-11-10 16:44
回复 3# lxzzr
?
可是我用示例文本测试有效啊...
作者: lxzzr 时间: 2011-11-10 17:01
回复 4# CrLf
搞定。。。
作者: yyykkkyyyy 时间: 2011-11-10 17:10
向各位学习来了,特别感谢 CrLf 版主 为我咨询解答,我现在已摆脱讨厌的验证,特别是 set a=bat&echo %a:~-2% 一定要回答 at 才算对 , 问题是我不认为它是对的。
CrLf 版主的代码无疑是再简捷不过了,要是我也会往findstr 上想,我也注意到要求是“代码效率第一,其它其次”,想请教一下加 “:\=\\” 是有什么特别的原因吗? 不加嘛认为忽略字符串中有“\”带来的问题,既想兼顾这类符号,为什么没管 “$” 呢, 句点符“.”影响最小 也是可同样解决 要是还想兼顾星号符“*” 就比较麻烦了,不知有什么好的解决方法
作者: CrLf 时间: 2011-11-10 17:23
回复 6# yyykkkyyyy
嗯,是不够严谨,思路自相矛盾了。再改下,除了 * 号之外,findstr 中所有特殊字符都能简单加上 \ 进行转义
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |