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

[文件操作] 批处理如何批量合并子文件夹-将所有子文件夹中文件上移?

经常遇到下载的文件,有很多文件夹,这些目录不需要的了,想要将所有的文件移动到同一个目录中,但是这样的文件夹太多

比如  c:\test 目录下 有 t1  t2 t3 t4 t5.....众多子目录,每个目录里面有很多文件,我就想要将这些所有的文件夹中的所有文件上移到 test目录中,而原有的子目录彻底删除


我的办法是 创建一个目录的 右键菜单项  (通过向一个高手学习,解决了附加功能到右键菜单的方法)

现在已经可以点击一个 文件夹 实现将这个文件夹的内容上移了 ,代码如下:
  1. @echo off
  2. title 欢迎使用凌霄文件夹操作助手
  3. color 1f
  4. MODE con: COLS=36 LINES=15
  5. reg query HKCR\Directory\shell\DirClearMove\command>nul 2>nul
  6. if %errorlevel%==0 goto jump
  7. title 安装凌霄文件夹操作助手...
  8. set CPath=%~0
  9. set CPath=%CPath:\=\\%
  10. echo REGEDIT4>"%TEMP%\RegYJ.reg"
  11. echo [HKEY_CLASSES_ROOT\Directory\shell\DirClearMove\command]>>"%TEMP%\RegYJ.reg"
  12. echo @="\"%CPath%\" \"%%1\"">>"%TEMP%\RegYJ.reg"
  13. regedit /s "%TEMP%\RegYJ.reg"
  14. del /q "%TEMP%\RegYJ.reg"
  15. echo intAnswer = Msgbox ("1.DirClearMove已添加到右键菜单中" ^& vbNewLine ^& "" ^& vbNewLine ^& "2.在目录上右击用DirClearMove查看", ok, "Jason Shaw 提示您") >"%TEMP%\inform.vbs"
  16. attrib +H "%TEMP%\inform.vbs"
  17. "%TEMP%\inform.vbs"
  18. del /a /f "%TEMP%\inform.vbs"
  19. goto end
  20. :jump
  21. cls
  22. set input=%1
  23. if %errorlevel%==1 goto end
  24. cls
  25. echo.
  26. echo 请按照下面的提示选择功能
  27. echo.
  28. echo.
  29. echo a、彻底清空所选文件夹下所有内容
  30. echo.
  31. echo b、所选文件夹下所有内容移至上级目录
  32. echo.
  33. echo c、退出
  34. echo.
  35. :cho
  36. set select=
  37. set /p select=请选择(a/b/c):
  38. if /i "%select%"=="a" goto clean
  39. if /i "%select%"=="b" goto upward
  40. if /i "%select%"=="c" goto end
  41. echo 输入错误!请按照提示选择输入a/b/c
  42. echo 按任意键重新选择...&pause>nul
  43. goto cho  
  44. exit
  45. :clean
  46. cls
  47. set b=
  48. echo Wsh.Echo MsgBox("您要彻底清空的文件夹为:"^&Chr(13)^&Chr(10)^&Chr(13)^&Chr(10)^&%input%^&Chr(13)^&Chr(10)^&Chr(13)^&Chr(10)^&"清空后不能恢复!请确认无误",33,"重要提醒") >"%TEMP%\tmp.vbs"
  49. attrib +H "%TEMP%\tmp.vbs"
  50. for /f %%a in ('cscript "%TEMP%\tmp.vbs" //nologo //e:vbscript') do set "b=%%a"
  51. del /q /f /ah "%TEMP%\tmp.vbs"
  52. if %b%==2 goto end
  53. echo 正在执行清空,请稍等...
  54. attrib -s -h -r %input%\*.* && del %input%\*.* /q>nul 2>nul
  55. dir %input% /ad /b /s>del.txt
  56. for /f "tokens=*" %%i in (del.txt) do rd "%%i" /s /q>nul 2>nul
  57. del del.txt /s /q>nul
  58. echo.
  59. echo 成功清空所选文件夹!按任意键退出!&pause>nul
  60. exit
  61. :upward
  62. cls
  63. set b=
  64. echo Wsh.Echo MsgBox("您要上移的文件夹为:"^&Chr(13)^&Chr(10)^&Chr(13)^&Chr(10)^&%input%^&Chr(13)^&Chr(10)^&Chr(13)^&Chr(10)^&"上移后将被彻底删除!请确认无误",33,"重要提醒") >"%TEMP%\tmp.vbs"
  65. attrib +H "%TEMP%\tmp.vbs"
  66. for /f %%a in ('cscript "%TEMP%\tmp.vbs" //nologo //e:vbscript') do set "b=%%a"
  67. del /q /f /ah "%TEMP%\tmp.vbs"
  68. if %b%==2 goto end
  69. echo 正在执行上移,请稍等...
  70. rem xcopy所有文件夹下内容及其属性
  71. xcopy /e /h /r /k /a %input% %input%\..>nul
  72. rem 彻底删除所选文件夹
  73. rd %input% /s /q
  74. echo.
  75. echo 成功上移所选文件夹内容!按任意键退出!&pause>nul
  76. exit
  77. :end
  78. exit
复制代码



但是 有几个问题无法解决,
1、每次只能点击一个文件夹 要将所有文件夹一起操作如何实现呢?
2、现在的程序运行时有个dos窗口,如何能将这个彻底隐藏,而不影响我中间的确认过程


急切盼望有高手帮忙解决这个问题,bow!

简单易行,但是容错性不高的办法,会覆盖同名文件:
  1. @echo off
  2. (for /f "delims=" %%a in ('dir /b /s /ad') do (
  3. move /y "%%a\*.*" "%%a\.."&&rd %%a
  4. ))>nul 2>nul
  5. pause
复制代码

TOP

返回列表