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

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

本帖最后由 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
复制代码
只对前目录里的文件夹生效,子目录里的文件夹没有被重命名,求前辈大佬们指点,万分感谢!

本帖最后由 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

评分人数

TOP

回复 2# yhcfsr
谢谢前辈指点!
原来sort 这个是排序命令,/r 这个参数就是倒序吧?
有点明白了,虽然您的代码有一句用到了很多不认识的命令够我学一阵了,hhh
您写的代码方案测试没问题,总之非常感谢!!

TOP

返回列表