解释
我有一个标有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,哈哈。
答案 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
文件,并在必要时将其移动到目录中,然后删除额外目录。