批处理:FINDSTR 正则表达式不起作用

Mar*_*mbo -2 regex windows cmd batch-file findstr

echo a.txt| FINDSTR /R ".+\.txt$"
Run Code Online (Sandbox Code Playgroud)

不工作,甚至不:

echo a.txt| FINDSTR /R .+\.txt$
Run Code Online (Sandbox Code Playgroud)

为什么?

编辑:

现在可以了!

echo a.txt| FINDSTR /R ..*\.txt$
Run Code Online (Sandbox Code Playgroud)

Tho*_*ler 5

+a) Findstr 的正则表达式中没有。*代替使用。..*应该是 的正确替代品.+

b) 行尾之前可能存在不可见字符,例如,由于echo之前有尾随空格而导致|.在行尾之前添加另一个以覆盖它。

C:\> echo a.txt | findstr /r ".*\.txt.$"
a.txt
Run Code Online (Sandbox Code Playgroud)

不加引号也是可以的。

  • @ThomasWeller 不可见字符是 `a.txt` 和 `|` 之间的空格,它也是由 `echo` 输出的,因此重定向到处理命令 `findstr` 的 __STDIN__ 。使用 `echo a.txt| 时一切都如预期的那样 findstr /R ".*\.txt$"`. 例如,请参阅我对 [Why does ECHO command print some extra Trailing space into the file?](/sf/answers/3288076711/) 的回答以了解详细信息。 (3认同)
  • 将“+”更改为“*”会改变行为;而是用“..*”替换“.+”以获得相同的结果...... (3认同)