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

[文件操作] 批处理如何批量自动合并前缀相似文件夹,保留长名夹?

夹冗余问题〓许多夹名前缀相同,如何批量自动剪切短名夹内文件到长名夹中?最后清空所有空文件夹。
【星要出于雅各】◆民24:17,◆太2:2✔
【星要出于雅各】◆民24:17✖
【星要出于雅各】✖
【牧人朝拜】◆路2:15✔
【牧人朝拜】✖
【亚伯拉罕后裔】◆太1:1✔
【亚伯拉罕后裔】✖
。。。。。

  1. @echo off
  2. @rem 保存为ANSI格式
  3. setlocal enabledelayedexpansion
  4. set "Previous_Folder=%ComSpec%"
  5. for /f "delims=" %%a in ('dir/b/s/ad^|sort') do (
  6. set "Current_folder=%%a"
  7. call set "dif_str=%%Current_folder:!Previous_Folder!=%%
  8. if "!dif_str!" neq "%%a" (
  9. move /y "!Previous_Folder!\*.*" "%%~a\" >nul 2>&1
  10. rd /q /s "!Previous_Folder!" >nul 2>&1
  11. )
  12. set "Previous_Folder=!Current_folder!"
  13. )
复制代码

TOP

回复 2# hfxiang


    感谢答复,代码非常好用!

TOP

回复 2# hfxiang


    我实测的情况怎么好像不一样呢? 文件夹全删了.

TOP

本帖最后由 qixiaobin0715 于 2023-2-8 17:07 编辑

回复 4# cnnetstar
2楼代码有点狠。以下代码只针对当前文件夹下的文件夹,而对下一层子孙文件夹不起作用,相对而言要安全一些,rd命令的/s参数要慎用:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set Folder=/
  4. for /f "delims=" %%a in ('dir /b /ad^|sort /r') do (
  5.     if "!Folder:%%a=!" neq "!Folder!" (
  6.         move /y "%%a\*.*" "!Folder!"
  7.         rd "%%a" 2>nul
  8.     ) else (
  9.         set Folder=%%a
  10.     )
  11. )
  12. pause
复制代码
删除空文件夹用不带参数的rd命令即可,过度使用参数出问题的可能性会增加。

TOP

回复 5# qixiaobin0715


    我试了一哈, 好像没有变化呢.

TOP

本帖最后由 qixiaobin0715 于 2023-2-9 09:41 编辑

回复 6# cnnetstar
粗心。那可能是因为你没理解楼主的意思,较长文件夹名的字符要完全包含较短文件夹名的字符。
请仔细看看顶楼的描述。
如无特殊情况,还要养成一种习惯,那就是批处理文件最好保存为ANSI编码。

TOP

返回列表