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

[文件操作] [已解决]以数字命名的文件夹批量重命名,如何在不足指定位数的名称前补0/加0

[复制链接]
发表于 2018-3-15 03:47:45 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2018-3-16 14:56 编辑

求助:文件夹批量重命名
前言,本人无基础
现有一批用数字命名的文件夹,在不同的目录中:基本结构如下:
X:备份\AA-115\1
X:备份\AA-126\3
.
.
.
X:备份\AA-116\2333
以及
X:存储\AA-115\1
X:存储\AA-126\3
.
.
.
X:存储\AA-116\2333
我想做个批处理,判断文件夹名字,不足4位数的文件夹重命名在前面用0补齐4位数
自己在网上参考后写的代码如下:
  1. @echo off&color 3a&set c=0123456789abcdefghijklmnopqrstuvwxyz
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%i in ('dir /a:d /s /b') do (
  4. set n=%%i
  5. if !n! lss 10 (if !n! geq 0 ren "!n!" "000!n:~-1!")
  6. if !n! lss 100 (if !n! geq 10 ren "!n!" "00!n:~-2!")
  7. if !n! lss 1000 (if !n! geq 100 ren "!n!" "0!n:~-3!")
  8. )
  9. echo 正在处理...
  10. echo.
  11. echo 处理完毕
  12. pause
复制代码
只对前目录里的文件夹生效,子目录里的文件夹没有被重命名,求前辈大佬们指点,万分感谢!
发表于 2018-3-15 14:44:05 | 显示全部楼层
本帖最后由 yhcfsr 于 2018-3-15 14:46 编辑
  1. @echo off
  2. for /f "delims=" %%a in ('dir /ad/s/b^|sort /r') do (
  3.         set "$=%%~na#"&set len=0
  4.         setlocal enabledelayedexpansion
  5.         for %%b in (4 2 1)do if !$:~%%b^,1!. NEQ . set/a len+=%%b&set $=!$:~%%b!
  6.         if !len! equ 1 ren "%%a" "000%%~na"
  7.         if !len! equ 2 ren "%%a" "00%%~na"
  8.         if !len! equ 3 ren "%%a" "0%%~na"
  9.         endlocal
  10. )

  11. pause
复制代码
关键是sort /r
dir打印目录列表后,这张表就被保存了。你的代码先命名前级目录,这时子目录的实际路径已变。
而dir之前保存的目录列表还是原来的,CMD还是按原来的路径去命名子目录,这里就会提示找不到路径,重命名失败。
解决方法是逆序排列,让子目录排在前面。先重命名子目录,再命名母目录,就没问题了。

评分

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

查看全部评分

 楼主| 发表于 2018-3-15 21:01:42 | 显示全部楼层
回复 2# yhcfsr
谢谢前辈指点!
原来sort 这个是排序命令,/r 这个参数就是倒序吧?
有点明白了,虽然您的代码有一句用到了很多不认识的命令够我学一阵了,hhh
您写的代码方案测试没问题,总之非常感谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 04:54 , Processed in 0.017540 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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