使用原始文件夹名称的一部分和分隔符将文件夹移动到新文件夹

使用原始文件夹名称的一部分和分隔符将文件夹移动到新文件夹

我正在尝试根据文件夹名称的最后部分将文件夹移动到新文件夹中。分隔符是下划线。文件夹名称中的下划线数量差异很大。我发现使用名称第一部分的代码,但无法弄清楚如何让它使用名称的最后一部分。在 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

相关内容