Как удалить файлы, содержащие строку в определенном месте? - PullRequest
2 голосов
/ 09 марта 2019

Как мне удалить файлы, которые имеют определенную строку в определенном месте в своем имени файла, используя пакетный файл?

Я хочу удалить файлы, содержащие определенные строки, введенные конечным пользователем.

Например, я хочу удалить все файлы, содержащие 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

Я ввожу определенный номер, и он работает, но также удаляет все файлы, в названии которых указан год.

Могу ли я добавить что-то, что будет принимать переменную от числа до поля расширения?

Ответы [ 2 ]

1 голос
/ 10 марта 2019

Если все предоставленные вами файлы имеют формат 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
  • \ является escape-символом
  • . - подстановочный знак;это означает любой символ, поэтому он экранируется с помощью \, так как вам нужна настоящая точка.
  • [0-9] означает совпадение, только если существует один из символов в [], если любой из символов1, 2, 3, 4, 5, 6, 7, 8, 9 существуют.

Для получения дополнительной информации оиспользуемые команды, пожалуйста, введите cmd.exe:

  • for /?
  • set /?
  • title /?
  • echo /?
  • findstr /? объясняет принятые регулярные выражения
  • pause /?
  • dir /?
  • del /?
1 голос
/ 09 марта 2019

Спасибо за все Ваши ответы и комментарии. Я решил проблему другим способом. Я просто добавил точку перед знаком процента и удалил точку в конце. Так как нет ни одного до даты, это решает проблему. Работает нормально - проверено около 50 различных комбинаций имен файлов.

del /q /s "C:\Directory1\*.%_FileNumber%*"
del /q /s "C:\Directory2\*.%_FileNumber%*"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...