2

Я хотел бы изменить имя каталога с

view_pictures
personal_pictures
scenic_pictures

в

2017_view_pictures
2017_personal_pictures
2017_scenic_pictures

Внутри каждой папки есть файлы, и это всего лишь вымышленный пример, в исходном каталоге более 20 тысяч подкаталогов, поэтому ручное переименование невозможно.
Я попытался получить список с помощью команды дерева ,
Тогда я могу манипулировать списком, используя notepad++ и некоторые регулярные выражения,
Но дерево не даст полный путь, поэтому я могу сгенерировать команду.

Это структура каталогов:

root path
    picsfromA
        view_pictures
        personal_pictures
    picsfromB
        view_pictures
        personal_pictures
        scenic_pictures
    picsfromC
        personal_pictures
        scenic_pictures
    picsfromD
        personal_pictures
    picsfromN
        scenic_pictures

это желаемая структура каталогов:

root path
    picsfromA
        2017_view_pictures
        2017_personal_pictures
    picsfromB
        2017_view_pictures
        2017_personal_pictures
        2017_scenic_pictures
    picsfromC
        2017_personal_pictures
        2017_scenic_pictures
    picsfromD
        2017_personal_pictures
    picsfromN
        2017_scenic_pictures

ОБНОВИТЬ
Я тоже пытаюсь так:
трудная часть состоит в том, чтобы сломать строку пути и восстановить ее.

@echo off
SETLOCAL
set folder_path=%%f
for /D /r %%f in (*) do (
    set folder_path=%%f
    echo %folder_path%

    if "%folder_path:~-13%" EQU "view_pictures" (
      REM path without last folder name
      REM construct path without folder name
      REM [ren old folder] , [new folder.]
    )

  )

2 ответа2

1

for /D /r %%f in (*) do ( недопустимая комбинация, смотрите вывод с эхом.

  • Вы можете сложить два for /D чтобы перебрать сначала picsfrom.. а затем подпапки или
  • Вывод dir синтаксического анализа for /f фильтруется регулярным выражением ($ anchors в конце), чтобы соответствовать только желаемым подпапкам с findstr:

@Echo off
Set "Folders=view_pictures$ personal_pictures$ scenic_pictures$"

For /f "delims=" %%F in (
     'Dir /B/S/AD ^|Findstr /I "%Folders%"'
) Do Ren "%%~fF" "2017_%%~nxF"

Пример дерева на моем ramdrive A:

> tree
A:\
└───root path
    ├───picsfromA
    │   ├───2017_personal_pictures
    │   └───2017_view_pictures
    ├───picsfromB
    │   ├───2017_personal_pictures
    │   ├───2017_scenic_pictures
    │   └───2017_view_pictures
    ├───picsfromC
    │   ├───2017_personal_pictures
    │   └───2017_scenic_pictures
    ├───picsfromD
    │   └───2017_personal_pictures
    └───picsfromN
        └───2017_scenic_pictures

РЕДАКТИРОВАТЬ Вывод for /D /r %%A in (*) do Echo:%%A в моей системе

A:\root path\picsfromA
A:\root path\picsfromB
A:\root path\picsfromC
A:\root path\picsfromD
A:\root path\picsfromN
A:\root path\picsfromA\2017_personal_pictures:A:\root path\picsfromN
A:\root path\picsfromA\2017_view_pictures:A:\root path\picsfromN
A:\root path\picsfromB\2017_personal_pictures:A:\root path\picsfromN
A:\root path\picsfromB\2017_scenic_pictures:A:\root path\picsfromN
A:\root path\picsfromB\2017_view_pictures:A:\root path\picsfromN
A:\root path\picsfromC\2017_personal_pictures:A:\root path\picsfromN
A:\root path\picsfromC\2017_scenic_pictures:A:\root path\picsfromN
A:\root path\picsfromD\2017_personal_pictures:A:\root path\picsfromN
A:\root path\picsfromN\2017_scenic_pictures:A:\root path\picsfromN
1

Вот рабочее решение с использованием FOR /D /R

@echo off
for /d /r %%F in (*) do (
  if /i "%%~nxF" == "view_pictures" ren "%%F" "2017_%%~nxF"
  if /i "%%~nxF" == "personal_pictures" ren "%%F" "2017_%%~nxF"
  if /i "%%~nxF" == "scenic_pictures" ren "%%F" "2017_%%~nxF"
)

Или упрощенный с дополнительной петлей

@echo off
for /d /r %%F in (*) do for %%A in (view personal scenic) do (
  if /i "%%~nxF" == "%%A_pictures" ren "%%F" "2017_%%~nxF"
)

Или вы можете использовать решение FOR /F, опубликованное LotPings.

Вы также можете использовать мою утилиту переименования регулярных выражений JREN.BAT. JREN - это чистый сценарий (гибридный JScript/batch), который изначально запускается на любой машине с Windows начиная с XP - сторонний exe-файл не требуется.

jren "^" "2017_" /s /d /fm "scenic_pictures|personal_pictures|view_pictures"

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