文件名匹配模式时批处理脚本删除文件

时间:2014-04-25 12:50:38

标签: batch-file

今天非常紧张,我很长一段时间StackOverflow偷窥即将问我的第一个问题所以我希望我不要吮吸它。我可以使用控制台应用程序之类的东西轻松执行以下任务,但我希望可以在批处理脚本中执行此操作,而且我根本不了解批处理脚本。

我想删除目录中除名称与特定模式匹配的文件之外的所有文件。此目录中此类文件的典型示例如下:

  • dep_invoice_101.pdf - 删除
  • dep_invoice_102.pdf - 删除
  • invoice_103.pdf - 删除
  • invoice_106.pdf - 删除
  • invoice_106_E56.pdf - 保持
  • deposit_invoice_101_068.pdf - 保持

我想删除名称与

匹配的所有文件
  • 任何字符串(或任何内容)后跟" invoice _"
  • 后跟任意数字
  • 然后是下划线
  • 然后是另一个字母数字字符串

最后一个下划线是关键。如果我使用C#或其他东西,我会将名称提取为字符串,删除所有文本" invoice _"然后查看是否有剩余的下划线 - 这将是匹配,例如

  • " deposit_invoice_101_068.pdf"
  • 搜索"发票_"并删除包含此
  • 之前的所有文字
  • 留下" 101_068.pdf"
  • 如果此字符串中有任何下划线,则表示匹配

希望这是有道理的。如果这不是一个合适的问题,请告诉我。

非常感谢

2 个答案:

答案 0 :(得分:1)

for /f "tokens=*" %%a in (
  'dir /a-d /b *.pdf ^| findstr /v /r /c:"invoice_[0-9][0-9]*_.*\.pdf$"'
) do echo del "%%a"

如果输出到控制台是正确的,请删除echo命令

答案 1 :(得分:0)

@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
FOR /f "delims=" %%a IN (
  'dir /b /a-d "%sourcedir%\*" '
  ) DO (
 SET "filename=%%a"
 SET "filename=!filename:*invoice_=!"
 IF "!filename!"=="!filename:_=!" ECHO DEL "%sourcedir%\%%a"
)

GOTO :EOF

为了测试目的,所需的DEL命令仅为ECHO在您确认命令正确后,将ECHO DEL更改为DEL以实际删除文件。

您需要自然地将sourcedir更改为适合。

这遵循您的how I'd do it in C而不是您的叙述规范。