1

Я хочу переименовать большое количество файлов в формате:

Firstname LASTNAME ABC to yyyymmdd.pdf

где ABC - случайная аббревиатура, а yyyymmdd - дата, чтобы:

LASTNAME Firstname ABC to yyyymmdd.pdf

Он находится на компьютере без стороннего программного обеспечения, поэтому о таких замечательных инструментах, как Bulk Rename Utility, не может быть и речи. Я думаю сделать пакетный файл, но не знаю, с чего начать. Я нашел кучу других вопросов здесь и на других сайтах, подробно описывающих, как изменить дело, но я не хочу этого. Самое близкое, что я знаю, - это знание того, что мне придется использовать FINDSTR, но у меня недостаточно опыта сценариев командной строки, чтобы продолжить.

2 ответа2

0

Ваш ответ может быть значительно упрощен:

for /F "tokens=1-2*" %%f in ('dir /A-D /B *.pdf') do (
    ECHO ren "%%f %%g %%h" "%%g %%f %%h"
    ren "%%f %%g %%h" "%%g %%f %%h"
)

Это работает, потому что:

  • "tokens=1-2*" разбивает имя файла на пробелы, с Firstname в %%f , LASTNAME в %%g и всем остальным именем файла в %%h ;
  • нет встроенных циклов, поэтому отложенное расширение не требуется (переменные цикла неявно задерживаются); а также
  • в команде dir нет каталога, поэтому при раскрытии переменной не требуется никакой специальной обработки каталога.

Если сценарий должен работать с переданным именем каталога, поместите вышеупомянутое с pushd %1 и popd .

0

Хорошо, я понял это. Собрал рабочий пакетный файл из десятка других примеров здесь и в других местах:

@echo off
setlocal EnableDelayedExpansion

for /F "delims=" %%f in ('dir /A-D /B *.pdf') do (
   for /F "tokens=1-5 delims= " %%a in ("%%~Nf") do (
      ECHO ren "%%f" "%%b %%a %%c %%d %%e!%%~Xf"
      ren "%%f" "%%b %%a %%c %%d %%e!%%~Xf"
   )
)

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