批处理脚本不起作用,结果与提供的代码不同

时间:2014-02-26 00:10:35

标签: windows batch-file batch-processing

解释

我有一个标有MAP的文件夹,大约有15,103个子文件夹(都有自己唯一的名称)。

在每个子文件夹中包含另一个子文件夹,其名称与其父文件夹完全相同。

最终子文件夹中包含一个名为miniMap.canvas.png

的图像

这是路径的一个例子。

C:\用户\安德鲁\桌面\ MAP \ 000010000.img \ 000010000.img \ miniMap.canvas.png

这就是我想要的;

C:\用户\安德鲁\桌面\ MAP \ 000010000.img \ miniMap.canvas.png

此外,某些子文件夹不包含.png,因此我只想将两个文件夹合并为结果;

C:\用户\安德鲁\桌面\ MAP \ 000020000.img \

批量

setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('dir /A:D /S /B "C:\Users\Andrew\Desktop\MAP\*"') do (
    for %%y in ("%%a\*.png") do (
        call :GETPARENTPARENT "%%y" ret
        echo ret=!ret!
        move /Y "%%y" "!ret!"
      rd %%a
    )
)
goto:EOF

:GETPARENTPARENT
set fileP=%1
echo received=%fileP%
for %%a in (%fileP%) do (
    set parent=%%~dpa
    cd !parent!\..
    set PPPath=!cd!
    for %%x in ("!PPPath!") do (
        set "%~2=%%~dpnx"
    )
)
goto:EOF

结果

结果在提供的图片中非常有趣。

如您所见,包含图像的文件夹已合并;然而,他们是空的!不包含图像的文件夹未合并!最后,不是每个图像都在其尊重的文件夹中,而是在文件夹之外创建“文件”,从而破坏图像而不将它们放在那里的独特文件夹中。

PLS帮助。

编辑:我也有备份文件夹MAP,哈哈。

result

1 个答案:

答案 0 :(得分:2)

以下内容应该按照您的要求进行 -

set root=C:\Users\Andrew\Desktop\MAP
for /f %%a in ('dir /B /AD %root%') do if exist "%root%\%%a\%%a\miniMap.canvas.png" (
    move "%root%\%%a\%%a\miniMap.canvas.png" "%root%\%%a"
    rmdir "%root%\%%a\%%a"
)

它遍历主目录并检查指定子目录中是否存在miniMap.canvas.png文件,并在必要时将其移动到目录中,然后删除额外目录。