Пакетное переименование: пропуск уже переименованных файлов - PullRequest
0 голосов
/ 07 марта 2020

, поэтому в одном другом недавнем вопросе мне нужно было найти решение для массового переименования файлов, добавив .ab в имя файла. Мне это удалось, но теперь я столкнулся с другой проблемой. Каждый раз, когда я запускаю командный файл, он добавляет .ab ко всем файлам, даже к тем, которые уже переименованы. Я попытался исправить проблему следующим способом, который не работает.

rem @echo off

FOR /R "C:\Users\" %%G in (*.txt) DO (
  %%G|findstr /i /L ".ab">nul
  IF errorlevel 1 (
    REN "%%G" "%%~nG.ab.txt"
  ) ELSE (
    skip %%G
  )
)

pause

По сути, мне нужно проверить, содержит ли имя файла уже «.ab» в своем имени, а затем либо пропустить, либо добавить. АБ в зависимости от результата. Буду признателен за любую помощь.

1 Ответ

1 голос
/ 07 марта 2020

Используйте For /F l oop вместо For /R. Кроме того, вместо использования команды Dir с опцией /S, (которая будет выводить элементы, заканчивающиеся на .txt*) , используйте Where с опцией /R вместо (который будет выводить элементы, заканчивающиеся на .txt) .

Одна строка пример, (исключая те базовые имена, заканчивающиеся на , не содержащие, .ab):

@For /F "Delims=" %%G In ('^""%__AppDir__%where.exe" /R "C:\Users" "*.txt" 2^>NUL^|"%__AppDir__%findstr.exe" /IV "\.ab\.txt$"^"')Do @Ren "%%G" "%%~nG.ab%%~xG"

Не забудьте изменить C:\Users и / или оба экземпляра .txt и ab как / при необходимости.

...