Board logo

标题: [文件操作] 批处理如何批量自动合并前缀相似文件夹,保留长名夹? [打印本页]

作者: youxianwei    时间: 2022-10-22 13:06     标题: 批处理如何批量自动合并前缀相似文件夹,保留长名夹?

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

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

作者: youxianwei    时间: 2022-10-22 19:12

回复 2# hfxiang


    感谢答复,代码非常好用!
作者: cnnetstar    时间: 2023-2-8 14:21

回复 2# hfxiang


    我实测的情况怎么好像不一样呢? 文件夹全删了.
作者: qixiaobin0715    时间: 2023-2-8 16:45

本帖最后由 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命令即可,过度使用参数出问题的可能性会增加。
作者: cnnetstar    时间: 2023-2-8 19:03

回复 5# qixiaobin0715


    我试了一哈, 好像没有变化呢.
作者: qixiaobin0715    时间: 2023-2-9 08:12

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

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




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