标题: [文件操作] 批处理如何批量自动合并前缀相似文件夹,保留长名夹? [打印本页]
作者: youxianwei 时间: 2022-10-22 13:06 标题: 批处理如何批量自动合并前缀相似文件夹,保留长名夹?
夹冗余问题〓许多夹名前缀相同,如何批量自动剪切短名夹内文件到长名夹中?最后清空所有空文件夹。
【星要出于雅各】◆民24:17,◆太2:2✔
【星要出于雅各】◆民24:17✖
【星要出于雅各】✖
【牧人朝拜】◆路2:15✔
【牧人朝拜】✖
【亚伯拉罕后裔】◆太1:1✔
【亚伯拉罕后裔】✖
。。。。。
作者: hfxiang 时间: 2022-10-22 17:16
- @echo off
- @rem 保存为ANSI格式
- setlocal enabledelayedexpansion
- set "Previous_Folder=%ComSpec%"
- for /f "delims=" %%a in ('dir/b/s/ad^|sort') do (
- set "Current_folder=%%a"
- call set "dif_str=%%Current_folder:!Previous_Folder!=%%
- if "!dif_str!" neq "%%a" (
- move /y "!Previous_Folder!\*.*" "%%~a\" >nul 2>&1
- rd /q /s "!Previous_Folder!" >nul 2>&1
- )
- set "Previous_Folder=!Current_folder!"
- )
复制代码
作者: 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参数要慎用:- @echo off
- setlocal enabledelayedexpansion
- set Folder=/
- for /f "delims=" %%a in ('dir /b /ad^|sort /r') do (
- if "!Folder:%%a=!" neq "!Folder!" (
- move /y "%%a\*.*" "!Folder!"
- rd "%%a" 2>nul
- ) else (
- set Folder=%%a
- )
- )
- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |