Como renomear grupos de diretórios no windows?

2

Gostaria de alterar o nome do diretório

view_pictures
personal_pictures
scenic_pictures

para

2017_view_pictures
2017_personal_pictures
2017_scenic_pictures

Cada pasta tem arquivos dentro, e este é apenas um exemplo fictício, no diretório de origem existem mais de 20K subdiretórios, então a renomeação manual é impossível.
Tentei obter a lista com o comando tree ,
Então eu posso manipular a lista usando o notepad ++ e alguns regex,
Mas a árvore não dará um caminho completo para que eu possa gerar um comando.

Esta é a estrutura do diretório:

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

esta é a estrutura de diretórios desejada:

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

UPDATE
Eu também estou tentando assim:
a parte difícil é quebrar o caminho e reconstruí-lo.

@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.]
    )

  )
    
por user648026 10.09.2017 / 15:36

2 respostas

1

Aqui está uma solução de trabalho usando 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"
)

Ou simplificado com um loop extra

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

Ou você pode usar a solução FOR / F que LotPings publicou.

Você também pode usar meu utilitário de renomeação de expressão regular JREN.BAT . JREN é um script puro (JScript / batch híbrido) que é executado nativamente em qualquer máquina Windows do XP em diante - não é necessário nenhum arquivo exe de terceiros.

jren "^" "2017_" /s /d /fm "scenic_pictures|personal_pictures|view_pictures"
    
por 10.09.2017 / 18:00
1

for /D /r %%f in (*) do ( é uma combinação inválida, veja a saída com um eco.

  • Você pode empilhar dois for /D para iterar primeiro o picsfrom.. e, em seguida, as subpastas ou
  • Uma saída do diretório for /f parsing filtrada com uma expressão regular ($ âncoras no final) para corresponder apenas a subpastas desejadas com um 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"

Árvore de exemplo na minha 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

EDIT Saída de for /D /r %%A in (*) do Echo:%%A no meu sistema

A:\root path\picsfromA
A:\root path\picsfromB
A:\root path\picsfromC
A:\root path\picsfromD
A:\root path\picsfromN
A:\root path\picsfromA17_personal_pictures:A:\root path\picsfromN
A:\root path\picsfromA17_view_pictures:A:\root path\picsfromN
A:\root path\picsfromB17_personal_pictures:A:\root path\picsfromN
A:\root path\picsfromB17_scenic_pictures:A:\root path\picsfromN
A:\root path\picsfromB17_view_pictures:A:\root path\picsfromN
A:\root path\picsfromC17_personal_pictures:A:\root path\picsfromN
A:\root path\picsfromC17_scenic_pictures:A:\root path\picsfromN
A:\root path\picsfromD17_personal_pictures:A:\root path\picsfromN
A:\root path\picsfromN17_scenic_pictures:A:\root path\picsfromN
    
por 10.09.2017 / 17:26