[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何过滤给定字符中的某一个出现两次以上的行

如,给定字符set "str=enun wizard abc test",过滤掉类似:enunenunabc、enunabcenun、testwizardwizard这样的行?

能达到目的就行,代码效率第一,其它其次,大家帮忙想想办法
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2

回复 6# yyykkkyyyy


    嗯,是不够严谨,思路自相矛盾了。再改下,除了 * 号之外,findstr 中所有特殊字符都能简单加上 \ 进行转义

TOP

向各位学习来了,特别感谢 CrLf 版主 为我咨询解答,我现在已摆脱讨厌的验证,特别是 set a=bat&echo %a:~-2% 一定要回答 at 才算对 , 问题是我不认为它是对的。
CrLf 版主的代码无疑是再简捷不过了,要是我也会往findstr 上想,我也注意到要求是“代码效率第一,其它其次”,想请教一下加 “:\=\\” 是有什么特别的原因吗? 不加嘛认为忽略字符串中有“\”带来的问题,既想兼顾这类符号,为什么没管 “$” 呢,  句点符“.”影响最小 也是可同样解决 要是还想兼顾星号符“*” 就比较麻烦了,不知有什么好的解决方法
1

评分人数

    • CrLf: 感谢提醒PB + 3

TOP

回复 4# CrLf


   搞定。。。

TOP

回复 3# lxzzr


    ?
   可是我用示例文本测试有效啊...

TOP

本帖最后由 lxzzr 于 2011-11-10 16:16 编辑

回复 2# CrLf

没效果呀,老兄,一楼给出了示例文本

TOP

本帖最后由 CrLf 于 2011-11-10 17:26 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str= enun wizard abc test "
  3. for %%a in (!str!) do set "str=!str: %%a = %%a.*%%a !"
  4. ::如果要增强对特殊字符的兼容性,则使用 set "var=!var! %%a.*%%a" 设置变量,下文也改用 "!var:\=\\!"
  5. for %%a in (\ ^" [ ] ^^ ^$) do set "str=!str:%%a=\%%a!"
  6. findstr /v "!str:.=\.!" 1.txt
  7. pause
复制代码
1

评分人数

TOP

返回列表