找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 116389|回复: 37

[文件操作] 求助批处理批量解决移动指定类型文件到上一级目录中

[复制链接]
发表于 2024-4-10 10:58:59 | 显示全部楼层 |阅读模式
本帖最后由 mmm8422616 于 2024-4-10 11:00 编辑

多层级目录 最后一级目录下面有 .symlink .jgp .nfo 等等类型的文件 比如  D:\...\...\...\...\...\AAA\

求助批处理批量解决移动指定类型(比如.symlink)文件到上一级目录中,然后删除AAA下面的其他所有类型的其他文件(直接删除AAA文件夹及下面的文件)

哪位大大帮忙给实现一下啊 谢谢哦!
发表于 2024-4-10 13:32:46 | 显示全部楼层
  1. @echo off
  2. cd /d "%~dp0"
  3. set str=symlink
  4. for /f "delims=" %%d in ('dir /b /s /ad ^|sort /r') do (
  5.         move "%%d\*.%str%" "%%d\.."
  6.         del /q "%%d\*"
  7.         rd "%%d"
  8.         pause
  9.         exit
  10. )
复制代码
 楼主| 发表于 2024-4-10 15:35:21 | 显示全部楼层
回复 2# 77七

刚刚试了下 好像不对啊 把最后一级目录下的symlink移动了二级目录里面 然后其他类似的文件夹下的没有动
发表于 2024-4-10 16:15:43 | 显示全部楼层
回复 3# mmm8422616


V1.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. set "ExtList=symlink jgp nfo"
  4. for %%i in (%ExtList%) do (
  5.     call :ExecRelocate %%i
  6. )
  7. goto :eof

  8. :ExecRelocate
  9. for /f "delims=" %%d in ('dir /b /s /ad ^|sort /r') do (
  10.     move "%%d\*.%1" "%%d\.."
  11.     del /q "%%d\*"
  12.     rd "%%d"
  13.     pause
  14.     exit /b
  15. )
复制代码
发表于 2024-4-10 16:17:41 | 显示全部楼层
回复 3# mmm8422616


V2.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. set "ExtList=symlink jgp nfo"
  4. for /f "delims=" %%d in ('dir /b /s /ad ^|sort /r') do (
  5.     for %%i in (%ExtList%) do (
  6.         move "%%d\*.%%i" "%%d\.."
  7.     )
  8.     del /q "%%d\*"
  9.     rd "%%d"
  10.     pause
  11.     exit /b
  12. )
复制代码
发表于 2024-4-10 16:32:49 | 显示全部楼层
回复 3# mmm8422616


  
  1. @echo off
  2. cd /d "%~dp0"
  3. set str=symlink
  4. for /f "delims=" %%d in ('dir /b /s /ad') do (
  5.         dir /b /ad "%%d" |findstr . 1>nul || set _"%%d"=1
  6. )
  7. for /f "delims=" %%d in ('dir /b /s /ad') do (
  8.         if defined _"%%d" (
  9.                 if exist "%%d\*.%str%" (
  10.                         move "%%d\*.%str%" "%%d\.."
  11.                         del /q "%%d\*"
  12.                         rd "%%d"
  13.                 )
  14.         )
  15. )
  16. pause
复制代码
 楼主| 发表于 2024-4-11 00:15:28 | 显示全部楼层

批处理批量解决移动指定类型文件到上一级目录中【已解决】

回复 6# 77七

感谢兄弟 已经测试完美解决我的问题 棒棒哒!
发表于 2024-4-11 08:45:15 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2024-4-11 08:48 编辑

findstr有时是好用,但总觉得尽量少用为好,findstr属于外部命令,调用时其效率要差些,特别是在循环体内调用且又使用了管道命令效率更差些。
  1. @echo off
  2. for /f "delims=" %%i in ('dir /s /b /ad') do (
  3.     if exist "%%i\*.symlink" (
  4.         set n=
  5.         for /f "delims=" %%j in ('dir /b /ad "%%i"') do set n=true
  6.         if not defined n (
  7.             move "%%i\*.symlink" "%%i\.."
  8.             rd /s /q "%%i"
  9.         )
  10.     )
  11. )
  12. pause
复制代码
以上代码未经测试,可能会有问题,但大体思路应当是这样。运行代码前请备份好源文件,以免出现意外。

评分

参与人数 1技术 +1 收起 理由
77七 + 1 感谢分享

查看全部评分

 楼主| 发表于 2024-4-11 15:06:05 | 显示全部楼层
回复 8# qixiaobin0715


    已经测试,没有问题,非常感谢大大们的帮助!!!
发表于 2024-4-11 15:21:22 | 显示全部楼层
回复 1# mmm8422616

一楼题意是指“最后一级目录(不再含子目录)”,如是则代码也许可进一步简化...
以下代码假设最后一级目录为 d:\a\aa\aaa

  1. @echo off &set "_cd=d:\a\aa\aaa"
  2. cd /d "%_cd%" &(for %%F in ( "symlink" "jpg" "nfo" ) do move /y "*.%%~F" "..") 2>nul
  3. cd ".." & rd /s/q "%_cd%" &pause &exit/b
复制代码
 楼主| 发表于 2024-4-11 16:09:56 | 显示全部楼层
回复  mmm8422616
77七 发表于 2024-4-10 16:32



    实际使用过程中发现了点小问题,麻烦大大给修改一下,比如目录下面有这几种类型的文件 .symlink .mp4 .mkv .nfo .jpg 等等的,我需要把.symlink .mp4 .mkv这几种类型的文件进行移动,然后再删除目录下的其他文件、再删除此文件夹。

现在的情况是,我移动了symlink类型的文件后,也删除了我想移动的mp4 mkv类型的文件了 当时没有考虑文件夹下有不同的影视文件类型。

麻烦大大给修改一下啊!
 楼主| 发表于 2024-4-11 16:13:21 | 显示全部楼层
回复 10# aloha20200628


    这个好像不符合我的要求 你直接定义到了一个目录下了 实际上有很多大量这样类似的目录结构 需要批量进行
发表于 2024-4-11 16:51:43 | 显示全部楼层
回复 11# mmm8422616


  1. @echo off
  2. cd /d "%~dp0"
  3. set str=symlink mp4 mkv
  4. for /f "delims=" %%d in ('dir /b /s /ad') do (
  5.         dir /b /ad "%%d" |findstr . 1>nul || set _"%%d"=1
  6. )
  7. for /f "delims=" %%d in ('dir /b /s /ad') do (
  8.         if defined _"%%d" (
  9.                 for %%x in (%str%) do (
  10.                         if exist "%%d\*.%%x" (
  11.                                 move "%%d\*.%%x" "%%d\.."
  12.                                 set _"%%d"=
  13.                         )
  14.                 )
  15.                 if not defined _"%%d" (
  16.                         del /q "%%d\*"
  17.                         rd "%%d"
  18.                 )
  19.         )
  20. )
  21. pause
复制代码
发表于 2024-4-11 16:52:54 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2024-4-11 16:58 编辑
  1. @echo off
  2. for /f "delims=" %%i in ('dir /s /b /ad') do (
  3.     set n=
  4.     for /f "delims=" %%j in ('dir /b /ad "%%i"') do set n=true
  5.     if not defined n (
  6.         set m=
  7.         for /f "delims=" %%k in ('dir /b /a-d *.symlink *.mp4 *.mkv') do (
  8.             set m=true
  9.             move "%%i\%%k" "%%i\.."
  10.         )
  11.         if defined m rd /s /q "%%i"
  12.     )
  13. )
  14. pause
复制代码
发表于 2024-4-11 18:35:37 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-4-11 18:37 编辑

回复 12# mmm8422616
处理(删除)“多个” 末级目录和处理(删除)“每个” 末级目录可不是一回事
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 02:47 , Processed in 0.020704 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表