0

我们使用以下命令批量使用正则表达式,

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

4 回答 4

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
于 2013-07-08T05:35:31.567 回答
1

文件有扩展名吗?

Dir "c:\test\Res345_45664_1335" /s /b /a:-d | findstr /R "[0-9]*_[0-9]*_[0-9]*\."
于 2013-07-08T08:11:34.407 回答
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

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

于 2013-07-08T04:56:24.823 回答
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}"

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

于 2020-04-18T04:51:16.003 回答