将特定文件移出子文件夹并删除所述子文件夹

时间:2015-07-25 07:29:55

标签: windows batch-file cmd

我最近将我的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
)

再一次,这是我第一次创建批处理文件,所以非常感谢任何帮助!

1 个答案:

答案 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" 
)

就是这样!