Board logo

标题: [文件操作] 【已解决】批处理怎样判断最后一级子目录,批量移动到当前目录? [打印本页]

作者: thp2008    时间: 2022-9-15 23:26     标题: 【已解决】批处理怎样判断最后一级子目录,批量移动到当前目录?

本帖最后由 thp2008 于 2022-9-16 11:37 编辑

例如我的当前目录是 E:\Lever1\

E:\Lever1\当前目录的子目录大概是这样个情况

E:\Lever1\Le02\Le03\Le04\le05\le06\*.MP4
E:\Lever1\Ae02\Ae03\Ae04\Ae05\*.GIF
E:\Lever1\Be02\Be03\Be04\*.MP4
E:\Lever1\Ce02\Ce03\Ce04\Ce05\*.GIF
E:\Lever1\De02\De03\*.MP4

也就是,当前目录下,有很多级子目录,子目录的层级不固定,文件夹名称有中文及空格,但只有最后一级子目录有文件,文件类型为两种:*.mp4和*.Gif以这个为条件判断,就是批处理,自动根据有指定文件类型的判断它最后所在的文件夹层级,然后批量自动将这些文件夹及文件夹下的所有文件,移动到当前目录下。
例如上面的例子,批处理自动将:le06\    Ae05\     Be04\      Ce05\     De03\  这最后一级文件夹及文件夹下的文件,移动到当前目录 E:\Lever1\下。移除完毕后,将当前目录下的,所有空目录,全部删除掉。

上面为了讲清楚,我说的比较细,概括来讲,就是我在当前目录一运行这个批理,就自动检测最后一级文件夹,将所有的最后一级文件夹,移动到当前目录,最后,删除所有空目录。

不知道,我讲清楚没有,看看有没有什么好方法可以实现,感谢大神帮助!
作者: qixiaobin0715    时间: 2022-9-16 09:20

  1. @echo off
  2. for /f "delims=" %%a in ('dir /s /b /ad') do (
  3.     if exist "%%a\*.MP4" (
  4.         md "%%~nxa" 2>nul
  5.         copy "%%a\*.*" "%%~nxa\"
  6.     ) else if exist "%%a\*.GIF" (
  7.         md "%%~nxa" 2>nul
  8.         copy "%%a\*.*" "%%~nxa\"
  9.     )
  10. )
  11. for /f "delims=" %%a in ('dir /s /b /ad^|sort /r') do rd "%%a" 2>nul
复制代码
未测试
作者: Batcher    时间: 2022-9-16 09:37

回复 2# qixiaobin0715


    copy 应该换成 move 吧
作者: qixiaobin0715    时间: 2022-9-16 09:54

回复 3# Batcher
对对!!!
作者: Batcher    时间: 2022-9-16 10:58

回复 1# thp2008
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /s /a-d *.mp4 *.gif') do (
  5.     if exist "%%~dpi" (
  6.         set "ThisFolder=%%~dpi"
  7.         set "ThisFolder=!ThisFolder:~0,-1!"
  8.         move "!ThisFolder!" "%~dp0"
  9.     )
  10. )
  11. for /f "delims=" %%a in ('dir /b /s /ad ^| sort /r') do (
  12.     rd "%%a" 2>nul
  13. )
复制代码

作者: thp2008    时间: 2022-9-16 11:36

感谢qixiaobin0715 和 Batcher 两位老大的帮忙,我测试了,两位的都可以满足要求,成功了。
Batcher 的还可以支持个别,有.mp4和.Gif的下面还有个子目录的情况。太好了。
膜拜两位,我来好好研究一下。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2