元のフォルダ名の一部と区切り文字を使用してフォルダを新しいフォルダに移動する

元のフォルダ名の一部と区切り文字を使用してフォルダを新しいフォルダに移動する

名前の最後の部分に基づいて、フォルダーを新しいフォルダーに移動しようとしています。区切り文字はアンダースコアです。フォルダー名に含まれるアンダースコアの数は大きく異なります。名前の最初の部分を使用するコードは見つかりましたが、名前の最後の部分を使用する方法がわかりません。awk では、awk -F'_' {Print $NF} のようになります。

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

例を追加するために編集しました:

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"

答え1

これは予想される結果でしょうか:

ここに画像の説明を入力してください

@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

答え2

Linux または WSL を使用してこれを行う最も簡単な方法は次のとおりです。

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

出典:https://askubuntu.com/a/538270

関連情報