.BAT 文件按文件名将文件移动到文件夹和子文件夹中...无法使子文件夹工作

.BAT file to move files into folders and subfolders by filename... can't get subfolders to work

我就是想不通。

我有一堆名称格式的文件:"PREFIX_PREFIX2_filename.pdf"

我想像这样将它们分类到文件夹中:"PREFIX/PREFIX2/(files)"

这是我目前拥有的:

setlocal enableextensions disabledelayedexpansion

for %%f in (*_*_*.pdf, *_*_*.png) do (
    for /f "tokens=1, 2 delims=_" %%p in ("%%~nf") do (
        for %%d in ("%%~dpf.") do if /i not "%%~p"=="%%~nd" (
            if not exist "%%~dpf\%%~p"  md "%%~dpf\%%~p"
            if not exist "%%~dpf\%%~p"  md "%%~dpf\%%~p"
            move "%%~ff" "%%~dpf\%%~p"
        )
    )
)

这会根据第一个前缀对它们进行排序,但我无法进一步了解,老实说,我什至不确定这里到底发生了什么。这种 CMD 语言对我来说是我见过的最丑陋和最神秘的东西。

我已经阅读了一堆类似的问题,但仍然无法解决。

如果有人能告诉我如何完成这个相对简单的任务,并向我解释这里到底发生了什么,我将不胜感激。

这个方法比较简单:

setlocal

for /F "tokens=1,2* delims=_" %%a in ('dir /B *_*_*.pdf *_*_*.png') do (
   if not exist "%%a" md "%%a"
   if not exist "%%a\%%b" md "%%a\%%b"
   move "%%a_%%b_%%c" "%%a\%%b\%%c"
)

即:dir /B *_*_*.pdf 命令生成一个 PREFIX_PREFIX2_filename.pdf 格式的名称列表。 for /F "tokens=1,2* delims=_" %%a 这样将这些名称分成 3 个标记:%%a=PREFIX%%b=PREFIX2%%c=filename.pdf。其余的很明显...

PS - 我建议您将标题中的 sort 改为 move。第一项给出了完全不同的任务的想法...