找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21445|回复: 10

[文件操作] 【已解决】批处理在多个文件夹下子夹合并及重命名等问题

[复制链接]
发表于 2023-2-10 12:07:09 | 显示全部楼层 |阅读模式
本帖最后由 cnnetstar 于 2023-2-21 15:45 编辑

D:\张三李四王五       
        ├─A级夹多个
        │  ├─B级夹多个
        │  │  ├─1C级  数字+汉字夹多个
        │  │  │  ├─10D级纯数字文件多个
        │  │  │  │      001.jpg
        │  │  │  └─11D级纯数字文件多个
        │  │  │          001.jpg
        │  │  │          002.jpg
        │  │  ├─2C级  数字+汉字夹多个
        │  │  │  ├─12D级纯数字文件多个
        │  │  │  │      001.jpg
        │  │  │  │      002.jpg
        │  │  │  └─13D级纯数字文件多个
        │  │  │          001.jpg
        │  │  │          002.jpg
        │  │  │          003.jpg
        │  │  ├─3C级  数字+汉字夹多个
        │  │  │  ├─14D级纯数字文件多个
        │  │  │  │      001.jpg
        │  │  │  │      002.jpg
        │  │  ├─1CZ级  数字+汉字夹多个
        │  │  │  ├─10D级纯数字文件多个
        │  │  │  │      001.jpg
        │  │  │  └─11D级纯数字文件多个
        │  │  │          001.jpg
        │  │  │          002.jpg
        │  │  ├─2CZ级  数字+汉字夹多个
        │  │  │  ├─12D级纯数字文件多个
        │  │  │  │      001.jpg
        │  │  │  │      002.jpg
        │  │  │  └─13D级纯数字文件多个
        │  │  │          001.jpg
        │  │  │          002.jpg
        │  │  │          003.jpg
        │  │  ├─3CZ级  数字+汉字夹多个
        │  │  │  ├─14D级纯数字文件多个
        │  │  │  │      001.jpg
        │  │  │  │      002.jpg
想要实现:
1. BAT文件在A级(如放在B级要分别在多个B级多次执行). 多个A级夹\B级夹\C级夹下的多个D级夹上移合并到第一个C级夹下,
即: 12D, 13D, 14D……等等合并移动到1C下, 其他类同. 注: C级夹格式为数字+文字, 文字部分相同. 示例: 1你好, 2你好,…… 3你们好, 4你们好,…… 5朋友们好, 6朋友们好……
2. 合并完成之后, REN改名D级夹为C-D(统一成4位数不足补0)并移至B级目录下后删除空夹.
注: 这部分已经实现, 随附如下
  1. @echo off & setlocal enabledelayedexpansion
  2. for /r /d %%a in (*) do (
  3.     dir /b /ad "%%a" | findstr . >nul || (
  4.         set /a str=%%~na+10000
  5.         for %%i in ("%%a\..") do move "%%a" "%%~dpa\..\%%~nxi-!str:~-4!"
  6.     )
  7. )
  8. for /f "delims=" %%i in ('dir /s /b /ad ') do rd "%%i"

  9. pause&exit
复制代码
3. 以上不知道有没有描述清楚问题, 感觉有点儿绕口. 欢迎随时提问, 感谢!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2023-2-10 12:18:22 | 显示全部楼层
REN改名D级夹为C-D(统一成4位数不足补0), 括号里应该是: D级统一成4位数不足补0
发表于 2023-2-17 10:46:54 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-2-21 08:10 编辑

回复 1# cnnetstar
两步合一步,批处理文件另存为ANSI编码并放在文件夹 D:\张三李四王五 下面:
  1. @echo off
  2. for /d %%a in (*) do (
  3.     pushd "%%a"
  4.     for /d %%b in (*) do (
  5.         pushd "%%b"
  6.         setlocal enabledelayedexpansion
  7.         for /d %%c in (*) do (
  8.             set /a n+=1
  9.             if !n! equ 1 set str=%%~fc
  10.             pushd "%%c"
  11.             for /d %%d in (*) do (
  12.                 set /a m=%%~nxd+10000
  13.                 move "%%d" "!str!\%%~nxc-!m:~-4!"
  14.             )
  15.             popd
  16.             rd "%%c" 2>nul
  17.         )
  18.         endlocal
  19.         popd
  20.     )
  21.     popd
  22. )
  23. pause
复制代码
代码未经测试,运行代码前,请备份好源文件夹以免出现意外。目录结构需严格按照顶楼所描述的情况。
 楼主| 发表于 2023-2-20 15:57:33 | 显示全部楼层
回复 3# qixiaobin0715


    感谢, 我试一试.
发表于 2023-2-21 08:41:36 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-2-21 09:14 编辑

回复 4# cnnetstar
1.由于没有提供测试文件,写代码时未考虑周全,变量延迟位置发生了偏差。已修改。
2.顶楼描述可能会有歧义,代码是按照我自己的理解写的,有问题可再讨论。
所谓歧义就是重命名D级文件夹时,是按合并前C级文件夹名,还是合并后C级文件夹名。
 楼主| 发表于 2023-2-21 13:29:12 | 显示全部楼层
本帖最后由 cnnetstar 于 2023-2-21 13:47 编辑

回复 5# qixiaobin0715


十分感谢. 我测试的情况还没及时反馈, 就又看到你的回复了. 好像上传不了附件, 我用网盘试一哈. 你修正后的已经满足部分需求, 只是移到一个夹子里了, 分类移到对应后的夹子里面就完美了.  是合并后C级的文件夹名.

附测试文件
发表于 2023-2-21 15:07:49 | 显示全部楼层
回复 6# cnnetstar
原来如此,真是开始怀疑自己的理解力了:
  1. @echo off
  2. for /d %%a in (*) do (
  3.     pushd "%%a"
  4.     for /d %%b in (*) do (
  5.         pushd "%%b"
  6.         setlocal enabledelayedexpansion
  7.         set "str1=%%~fb"
  8.         for /d %%c in (*) do (
  9.             pushd "%%c"
  10.             for /f "tokens=* delims=0123456789" %%i in ("%%c") do (
  11.                 set "str2=!str1!\%%i"
  12.                 if not exist "!str2!" md "!str2!"
  13.             )
  14.             for /d %%d in (*) do (
  15.                 set /a m=%%~nxd+10000
  16.                 move "%%d" "!str2!\!m:~-4!"
  17.             )
  18.             popd
  19.             rd "%%c"
  20.         )
  21.         endlocal
  22.         popd
  23.     )
  24.     popd
  25. )
  26. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2023-2-21 15:23:22 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-2-21 15:27 编辑

顶楼这句话到现在还没明白:
多个D级夹上移合并到第一个C级夹
即: 12D, 13D, 14D……等等合并移动到1C下
 楼主| 发表于 2023-2-21 15:42:48 | 显示全部楼层
回复 8# qixiaobin0715


    感谢!满足需求! 表述是有点儿不太清楚. 还是上附件更能说明问题些. 或者上图, 但好像我传不了图片.
发表于 2023-2-23 18:01:14 | 显示全部楼层
回复 9# cnnetstar


如果需要上传文件,可以用阿里云盘或百度网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
 楼主| 发表于 2023-2-24 13:59:22 | 显示全部楼层
回复 10# Batcher


    收到, 感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 05:17 , Processed in 0.015821 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表