标题: [文件操作] 【已解决】批处理在多个文件夹下子夹合并及重命名等问题 [打印本页]
作者: cnnetstar 时间: 2023-2-10 12:07 标题: 【已解决】批处理在多个文件夹下子夹合并及重命名等问题
本帖最后由 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级目录下后删除空夹.
注: 这部分已经实现, 随附如下- @echo off & setlocal enabledelayedexpansion
- for /r /d %%a in (*) do (
- dir /b /ad "%%a" | findstr . >nul || (
- set /a str=%%~na+10000
- for %%i in ("%%a\..") do move "%%a" "%%~dpa\..\%%~nxi-!str:~-4!"
- )
- )
- for /f "delims=" %%i in ('dir /s /b /ad ') do rd "%%i"
-
- pause&exit
复制代码
3. 以上不知道有没有描述清楚问题, 感觉有点儿绕口. 欢迎随时提问, 感谢!
作者: cnnetstar 时间: 2023-2-10 12:18
REN改名D级夹为C-D(统一成4位数不足补0), 括号里应该是: D级统一成4位数不足补0
作者: qixiaobin0715 时间: 2023-2-17 10:46
本帖最后由 qixiaobin0715 于 2023-2-21 08:10 编辑
回复 1# cnnetstar
两步合一步,批处理文件另存为ANSI编码并放在文件夹 D:\张三李四王五 下面:- @echo off
- for /d %%a in (*) do (
- pushd "%%a"
- for /d %%b in (*) do (
- pushd "%%b"
- setlocal enabledelayedexpansion
- for /d %%c in (*) do (
- set /a n+=1
- if !n! equ 1 set str=%%~fc
- pushd "%%c"
- for /d %%d in (*) do (
- set /a m=%%~nxd+10000
- move "%%d" "!str!\%%~nxc-!m:~-4!"
- )
- popd
- rd "%%c" 2>nul
- )
- endlocal
- popd
- )
- popd
- )
- pause
复制代码
代码未经测试,运行代码前,请备份好源文件夹以免出现意外。目录结构需严格按照顶楼所描述的情况。
作者: cnnetstar 时间: 2023-2-20 15:57
回复 3# qixiaobin0715
感谢, 我试一试.
作者: qixiaobin0715 时间: 2023-2-21 08:41
本帖最后由 qixiaobin0715 于 2023-2-21 09:14 编辑
回复 4# cnnetstar
1.由于没有提供测试文件,写代码时未考虑周全,变量延迟位置发生了偏差。已修改。
2.顶楼描述可能会有歧义,代码是按照我自己的理解写的,有问题可再讨论。
所谓歧义就是重命名D级文件夹时,是按合并前C级文件夹名,还是合并后C级文件夹名。
作者: cnnetstar 时间: 2023-2-21 13:29
本帖最后由 cnnetstar 于 2023-2-21 13:47 编辑
回复 5# qixiaobin0715
十分感谢. 我测试的情况还没及时反馈, 就又看到你的回复了. 好像上传不了附件, 我用网盘试一哈. 你修正后的已经满足部分需求, 只是移到一个夹子里了, 分类移到对应后的夹子里面就完美了. 是合并后C级的文件夹名.
[url=链接:https://pan.baidu.com/s/1UXvkkwpWOfoo20dgpD5QTQ?pwd=1234 提取码:1234]附测试文件[/url]
作者: qixiaobin0715 时间: 2023-2-21 15:07
回复 6# cnnetstar
原来如此,真是开始怀疑自己的理解力了:- @echo off
- for /d %%a in (*) do (
- pushd "%%a"
- for /d %%b in (*) do (
- pushd "%%b"
- setlocal enabledelayedexpansion
- set "str1=%%~fb"
- for /d %%c in (*) do (
- pushd "%%c"
- for /f "tokens=* delims=0123456789" %%i in ("%%c") do (
- set "str2=!str1!\%%i"
- if not exist "!str2!" md "!str2!"
- )
- for /d %%d in (*) do (
- set /a m=%%~nxd+10000
- move "%%d" "!str2!\!m:~-4!"
- )
- popd
- rd "%%c"
- )
- endlocal
- popd
- )
- popd
- )
- pause
复制代码
作者: qixiaobin0715 时间: 2023-2-21 15:23
本帖最后由 qixiaobin0715 于 2023-2-21 15:27 编辑
顶楼这句话到现在还没明白:
多个D级夹上移合并到第一个C级夹下
即: 12D, 13D, 14D……等等合并移动到1C下
作者: cnnetstar 时间: 2023-2-21 15:42
回复 8# qixiaobin0715
感谢!满足需求! 表述是有点儿不太清楚. 还是上附件更能说明问题些. 或者上图, 但好像我传不了图片.
作者: Batcher 时间: 2023-2-23 18:01
回复 9# cnnetstar
如果需要上传文件,可以用阿里云盘或百度网盘。
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: cnnetstar 时间: 2023-2-24 13:59
回复 10# Batcher
收到, 感谢!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |