Изменить имя папки с ГГГГ на ММММ ГГГГ

#batch-file #directory #rename

#пакетный файл #каталог #переименовать

Вопрос:

Мне нужен пакет, который может переименовывать имя папки с ГГГГ на ММ ГГГГ

Пример:

 2019JAN to January 2019
2019FEB to February 2019
etc...
 

Мой пакет ниже удалось переименовать только из YYYYMMM в MMMYYYY только. Буду признателен, если кто-нибудь поможет расширить мой код и добиться желаемого результата. Спасибо.

 @echo off
setlocal enableDelayedExpansion
for /d %%F in (*) do (
  set "folder=%%F"
  echo ren !folder! "!folder:~-3!!folder:~0,4!"
)
 

Ответ №1:

Задача переименования папки может быть выполнена с помощью:

 @echo off
setlocal EnableExtensions EnableDelayedExpansion
set "JAN=January"
set "FEB=February"
set "MAR=March"
set "APR=April"
set "MAY=May"
set "JUN=June"
set "JUL=July"
set "AUG=August"
set "SEP=September"
set "OCT=October"
set "NOV=November"
set "DEC=December"
for /D %%I in (20*) do (
    set "FolderName=%%I"
    call ren "%%I" "%%!FolderName:~4!%% !FolderName:~0,4!"
)
endlocal
 

Но имя папки в формате yyyy-MM было бы лучше, потому что папки с таким именем, упорядоченные по имени, также перечислены в правильном хронологическом порядке.

 @echo off
setlocal EnableExtensions EnableDelayedExpansion
set "JAN=01"
set "FEB=02"
set "MAR=03"
set "APR=04"
set "MAY=05"
set "JUN=06"
set "JUL=07"
set "AUG=08"
set "SEP=09"
set "OCT=10"
set "NOV=11"
set "DEC=12"
for /D %%I in (20*) do (
    set "FolderName=%%I"
    call ren "%%I" "!FolderName:~0,4!-%%!FolderName:~4!%%"
)
endlocal
 

Для рекурсивного переименования всех вложенных папок в папке пакетного файла с четырехзначным годом и сокращенным месяцем из трех символов в имени папки цикл FOR следует изменить на:

 for /F "delims=" %%I in ('dir "%~dp020*" /AD /B /S 2^>nul ^| %SystemRoot%System32findstr.exe /I /R "\20[0123456789][0123456789][ADFJMNOS][ACEOPU][BCGLNPRTVY]$"') do (
    set "FolderName=%%~nxI"
    call ren "%%I" "%%!FolderName:~4!%% !FolderName:~0,4!"
)
 

Регулярное выражение не идеально, чтобы избежать ложноположительных совпадений, т.Е. совпадающими могут быть также папки, начинающиеся с 20[0-9][0-9] , но следующие три символа не являются точно одним из сокращений двенадцати месяцев. Но в данном случае это не должно быть проблемой.

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

  • dir /?
  • call /?
  • echo /?
  • endlocal /?
  • findstr /?
  • for /?
  • ren /?
  • set /?
  • setlocal /?