1

У меня есть дерево каталогов, содержащих файлы и иногда копию в том же месте. Эта копия идентифицируется некоторой строкой, например _001 , добавленной к исходному имени файла.

  • somefile.txt и
  • somefile_001.txt

Я могу перечислить такие файлы в командной строке DOS, используя:dir /s * _001.*

или же

for /f "tokens=1,2 delims=_" %i in ('dir /s /b *_*.*') do echo %i_%j

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

1 ответ1

2

Ваша команда довольно близка. Попробуй это:

for %i in (*) do if exist "%~ni_001%~xi" echo del "%~ni_001%~xi"

Проверьте несколько из полученных операторов del для проверки, чтобы доказать, что правильные файлы удаляются, затем удалите «echo», чтобы удаление действительно произошло. Или перенаправьте вывод в файл операторов del и проверьте это.

Материал% ~ n и x объясняется ближе к концу команды help для.

РЕДАКТИРОВАТЬ:% XI не нужен. перед ним как. является частью расширения, возвращаемого% ~ xi. Исправлена.

РЕДАКТИРОВАТЬ 2: изменил 'del% i' на текущую форму, так как я неправильно прочитал исходный вопрос и подумал, что проверенный файл должен быть удален, а не копия _001. Также добавлены кавычки для защиты имен файлов с пробелами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .