我最近将我的panasonic相机上的硬盘导出到我的笔记本上,注意到视频文件没有按名称排序,而是由他们的父目录和所谓的父目录混淆了一堆杂项文件。
为了正确看待事物,目录树看起来像这样:
\Panasonic
\PRG00A
\PRG00B
...
\PRG069
Panasonic位于一堆文件夹中,因此我想将我的批处理文件放在\Panasonic
旁边。并让它相对于它的位置工作。
基本上我想创建一个批处理文件move.bat
,它将遍历\Panasonic
的子目录并移出任何视频文件(扩展名为.MOD以简化操作),然后删除父目录(例如\PRG00B
)。
结果是\Panasonic
目录只包含视频文件而不是带有一堆垃圾的子目录。
到目前为止我已经得到了(请记住,这是我的第一个批处理脚本,我甚至没有完全测试过它)。顺便说一句,继续选择不起作用。不过不确定原因。
@echo off
cls
set dirName=%~dp0Panasonic
goto question
:start
goto move
goto end
:move
for /D %%G in ("%cd%") do (
for %%I in ("%%G") do (
if %%I equ "*.MOD" (
move /Y %%I %dirName%
)
)
rmdir /s /q %%G
)
:end
echo Done.
pause
endlocal
exit
:question
set /P c="Are you sure you want to proceed with moving video files from %dirName%? [Y/N]"
if /I %c% equ 'y' (
echo Moving files...
goto start
) else (
goto end
)
再一次,这是我第一次创建批处理文件,所以非常感谢任何帮助!
答案 0 :(得分:1)
你几乎就在那里,但只需修复一些东西,非常容易修复,事实上,你只需要简化你的代码。
只需三个简单的步骤
步骤1.要遍历您已经拥有的所有目录,您的朋友是for /d
for /d %%a in (*) do echo %%a
步骤2.要将找到的每个目录中的所有.mod
文件移动到其父目录或层次结构中的一个目录(恰好是当前目录),您只需要
move %%a\*.mod .
不要使用/y
选项,因此它不会覆盖已经移动到父目录的现有文件(您将有机会稍后检查结果。继续阅读)
步骤3.最后,删除目录
rd %%a
但不要使用/s
,因此它只会在目录为空时工作,也就是说,如果您已成功移出其包含的所有文件。这样,您就可以浏览它们以查看剩余的内容而不会丢失任何数据。
因此,您的moveupallmod.bat
变得简单
@echo off
for /d %%a in (*) do (
move "%%a\*.mod" .
rd "%%a"
)
就是这样!