首页 > 解决方案 > 如何删除特定位置包含字符串的文件?

问题描述

如何使用批处理文件删除文件名中特定位置具有特定字符串的文件?

我想删除由最终用户输入的包含特定字符串的文件。

例如,我想2019从文件名如下所示的几个目录中删除所有包含的文件:

FILE 2019.03.09.FILE.2019.XXX

我有这个代码:

@ECHO off
TITLE REMOVE FILES
@ECHO:
SET /p _FileNumber= Enter file number You want to remove:

del /q /s "C:\Directory1\*%_FileNumber%.*"
del /q /s "C:\Directory2\*%_FileNumber%.*"

PAUSE

我输入特定的数字,它可以工作,但也会删除所有名称为年份的文件。

我可以在扩展字段之前添加一些可以从数字中获取变量的东西吗?

标签: batch-file

解决方案


如果您提供的所有文件都是 format FILE yyyy.mm.dd.FILE.yyyy.ext,则使用findstr正则表达式:

@echo off
title REMOVE FILES
echo:
set /p "_FileNumber=Enter file number You want to remove: "

for /F "delims= eol=" %%A IN ('dir /S /B /A-D "*" ^| findstr /RC:"FILE %_FileNumber%\.[0-9][0-9]\.[0-9][0-9]\.FILE\.%_FileNumber%\.ext"') do del /F /A "%%~fA"

pause

这将确保删除所有包含您提到的格式的用户输入的文件。

正则表达式解释:

  • /R使其在findstr
  • \是转义字符
  • .是通配符;它表示任何字符,因此\您需要一个真正的点来对其进行转义。
  • [0-9]表示仅当其中一个字符存在时才匹配[],如果任何字符1, 2, 3, 4, 5, 6, 7, 8,9存在。

有关使用的命令的更多信息,请输入cmd.exe

  • for /?
  • set /?
  • title /?
  • echo /?
  • findstr /?解释接受的正则表达式
  • pause /?
  • dir /?
  • del /?

推荐阅读