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

时间:2015-03-15 17:51:54

标签: batch-file cmd directory

我无法解决这个问题。

我有一堆名称格式的文件:" 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语言给我带来了我见过的最丑陋,最难以理解的东西。

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

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

1 个答案:

答案 0 :(得分:1)

这种方法更简单:

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。第一个术语提出了完全不同的任务......