Mueva carpetas a carpetas nuevas usando parte del nombre de la carpeta original con delimitador

Mueva carpetas a carpetas nuevas usando parte del nombre de la carpeta original con delimitador

Estoy intentando mover carpetas a carpetas nuevas según la última parte de su nombre. El delimitador es un guión bajo. El número de guiones bajos en los nombres de las carpetas varía enormemente. Encontré un código que usa la primera parte del nombre, pero no sé cómo hacer que use la última parte del nombre. En awk sería algo así como awk -F'_' {Imprimir $NF}.

@echo off
FOR /D %%G IN (*) DO (
    FOR /F "delims=_" %%H IN ("%%~G") DO (
        MD "%%~H" 2>nul
        MOVE "%%~G" "%%~H"
    )
)

Editado para agregar ejemplos:

Folder_01 -> md (if necessary) and move into folder "01"
Folder_02 -> md (if necessary) and move into folder "02"
weird_folder_name_a2d -> md (if necessary) and move into folder "a2d"

Respuesta1

¿Sería este el resultado esperado?

ingrese la descripción de la imagen aquí

@echo off

if exist "%~1" (IF not exist "%~1\" exit) else (exit)
pushd "%~1"

FOR /D %%a IN (*) DO call :MoveTo "%%~a"
exit


:MoveTo
set "FolderName=%~1"
FOR /F "delims=" %%a IN ("%FolderName:_=\%") DO (
                                                 MD "%%~nxa" 2>nul
                                                 MOVE "%FolderName%" "%%~nxa"
                                                )
goto :EOF

Respuesta2

Esta es la forma más sencilla de hacerlo, utilizando Linux o WSL:

find . -maxdepth 1 -type d -exec perl -e '$a="\Q@ARGV"; $a =~ /([^_]+$)/; `mkdir -p $1 && mv $a $1`' "{}" \;

Tomado de:https://askubuntu.com/a/538270

información relacionada