根据文件夹名称批处理合并文件夹

问题描述

我的子文件夹具有以下命名约定:

000026867_20200722_222406_SS24

我想合并所有共享相同名称最后一部分的文件夹的内容在这种情况下,所有以SS24结尾的文件夹。它总是在第三个下划线之后,但有可能在最后一个下划线之后超过4个字符。

我希望以SS24结尾的所有文件夹中的所有文件都位于一个名为All_SS24的新文件夹中

原始文件夹可以删除

@Echo off
pushd "C:\path\to\your\base\folder" 
for /f "Tokens=1* Delims=-" %%A in ( 'Dir /B /AD -' ) Do If Not Exist "%%A" ( 
    Ren "%%A-%%B" "%%A"
) Else ( 
    Move /Y "%%A-%%B*" "%%A\" RmDir "%%A-%%B" 
)
PopD

感谢您的帮助。

解决方法

这或多或少是您想要的:

@echo off
pushd "C:\path\to\your\base\folder" 
for /f "tokens=1-4*delims=_" %%a in ('dir /b /ad "*_*"') do (
    mkdir "%%d">nul 2>&1
    copy "%%a_%%b_%%c_%%d\*" "%%d" /Y
    rd "%%a_%%b_%%c_%%d" /S /Q
)
popd