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

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

本帖最后由 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. 以上不知道有没有描述清楚问题, 感觉有点儿绕口. 欢迎随时提问, 感谢!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 10# Batcher


    收到, 感谢!

TOP

回复 9# cnnetstar


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

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 8# qixiaobin0715


    感谢!满足需求! 表述是有点儿不太清楚. 还是上附件更能说明问题些. 或者上图, 但好像我传不了图片.

TOP

本帖最后由 qixiaobin0715 于 2023-2-21 15:27 编辑

顶楼这句话到现在还没明白:
多个D级夹上移合并到第一个C级夹
即: 12D, 13D, 14D……等等合并移动到1C下

TOP

回复 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

评分人数

TOP

本帖最后由 cnnetstar 于 2023-2-21 13:47 编辑

回复 5# qixiaobin0715


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

[url=链接:https://pan.baidu.com/s/1UXvkkwpWOfoo20dgpD5QTQ?pwd=1234  提取码:1234]附测试文件[/url]

TOP

本帖最后由 qixiaobin0715 于 2023-2-21 09:14 编辑

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

TOP

回复 3# qixiaobin0715


    感谢, 我试一试.

TOP

本帖最后由 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
复制代码
代码未经测试,运行代码前,请备份好源文件夹以免出现意外。目录结构需严格按照顶楼所描述的情况。

TOP

REN改名D级夹为C-D(统一成4位数不足补0), 括号里应该是: D级统一成4位数不足补0

TOP

返回列表