批处理文件中的正则表达式无效

时间:2013-07-08 04:47:54

标签: regex windows batch-file findstr

我们使用以下命令

批量使用Regex
Dir "C:\Test\Res345_45664_1335" /s /b /a:-d | findstr /R "[(\d+)_(\d+)_(\d+)]" > filelist.txt

“C:\ Test \ Res345_45664_1335”目录包含以下文件,

Res345_45664_1335.txt
Output.txt
list.txt

我们需要格式为 的文件 但上面的dir命令带有正则表达式,显示“C:\ Test \ Res345_45664_1335”目录中的所有文件。因为“C:\ Test \ Res345_45664_1335”目录包含相同的格式“Res345_45664_1335”。但我们只需要文件(完整路径)。

感谢。

4 个答案:

答案 0 :(得分:3)

\d()+不是findstr中的有效元字符。请参阅findstr /?更高级的帮助。您应该使用[0-9][0-9]*替换它。

Dir "C:\Test\Res345_45664_1335" /s /b /a:-d | findstr /ER "[0-9][0-9]*_[0-9][0-9]*_[0-9][0-9]*.txt" > filelist.txt

答案 1 :(得分:1)

文件是否有扩展名?

Dir "c:\test\Res345_45664_1335" /s /b /a:-d | findstr /R "[0-9]*_[0-9]*_[0-9]*\."

答案 2 :(得分:0)

Dir /s /b /a:-d *_*_*

不确定“格式”是什么意思


啊 - 文件名为string_string_string ...

的文件名
FOR /f "delims=" %%i IN ('dir /s /b /a-d *_*_*') DO ECHO "%%~ni"|FINDSTR /r "..*_..*_..*" >nul&IF NOT ERRORLEVEL 1 ECHO %%i

(这是一个批处理行 - 从提示中减少%%%

答案 3 :(得分:0)

批处理脚本不像编程语言那样具有可行性。一些简单的正则表达式可以与'findstr'一起使用,但是它有一些局限性,例如'+'字符替换为'。*'。但是不用担心,我为您提供解决方案。

您可以简单地在批处理脚本中以及解决方案下方的此处使用power-shell:

@powershell -command "if (($string -match $regex) -eq $true) {write-host matched!}"

它将为您工作,如果您想引发异常,则只需在批处理脚本中引发并断言为:

@powershell -command "if (($string -match $regex) -eq $true) {throw [System.ArgumentException] invalid input}"

我希望这对您和其他可能需要它的人来说足够。