[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 mmm8422616 于 2024-4-10 11:00 编辑

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

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

哪位大大帮忙给实现一下啊 谢谢哦!

  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. )
复制代码
bat小白,请多指教!谢谢!

TOP

回复 2# 77七

刚刚试了下 好像不对啊 把最后一级目录下的symlink移动了二级目录里面 然后其他类似的文件夹下的没有动

TOP

回复 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. )
复制代码
测试代码之前请做好备份

TOP

回复 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. )
复制代码
测试代码之前请做好备份

TOP

回复 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
复制代码
bat小白,请多指教!谢谢!

TOP

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

回复 6# 77七

感谢兄弟 已经测试完美解决我的问题 棒棒哒!

TOP

本帖最后由 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

评分人数

    • 77七: 感谢分享技术 + 1

TOP

回复 8# qixiaobin0715


    已经测试,没有问题,非常感谢大大们的帮助!!!

TOP

回复 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
复制代码

TOP

回复  mmm8422616
77七 发表于 2024-4-10 16:32



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

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

麻烦大大给修改一下啊!

TOP

回复 10# aloha20200628


    这个好像不符合我的要求 你直接定义到了一个目录下了 实际上有很多大量这样类似的目录结构 需要批量进行

TOP

回复 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
复制代码
bat小白,请多指教!谢谢!

TOP

本帖最后由 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
复制代码

TOP

本帖最后由 aloha20200628 于 2024-4-11 18:37 编辑

回复 12# mmm8422616
处理(删除)“多个” 末级目录和处理(删除)“每个” 末级目录可不是一回事

TOP

返回列表