Board logo

标题: [文件操作] 【已解决】批处理文件夹名中数字补0 [打印本页]

作者: haole    时间: 2014-6-19 19:17     标题: 【已解决】批处理文件夹名中数字补0

本帖最后由 haole 于 2014-6-20 00:16 编辑

有很多文件夹是以数字命名的,怎样才能让文件夹名中不足3位的数字补0,文件夹中有文件,希望修改文件夹名字,不修改文件名字

例1:文件夹的名字分别是1,2,3……,希望修改为001,002,003……
例2:文件夹的名字分别是1_1,1_2,1_3……,希望修改为001_001,001_002,001_003……


附上解决办法:

例1代码由
522235677
提供
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /ad /b') do (
  3.         set a=%%a
  4.         if "!a:~1,1!"=="" (ren %%a 00%%a) else (if "!a:~2,1!"=="" ren %%a 0%%a)
  5. )
  6. pause
复制代码
例2代码由
apang
提供
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=_" %%a in ('dir /ad /b *_*') do (
  3.         set /a a=%%a+1000,b=%%b+1000
  4.         ren %%a_%%b !a:~-3!_!b:~-3!
  5. )
  6. pause
复制代码

作者: 522235677    时间: 2014-6-19 19:43

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /ad /b') do (
  3. set a=%%a
  4. if "!a:~1,1!"=="" (ren %%a 00%%a) else (if "!a:~2,1!"=="" ren %%a 0%%a)
  5. )
  6. pause
复制代码
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=_" %%a in ('dir /ad /b *_*') do (
  3. set a=%%a
  4. if "!a:~1,1!"=="" (set n=00%%a) else (if "!a:~2,1!"=="" set n=0%%a)
  5. set a=%%b
  6. if "!a:~1,1!"=="" (set m=00%%a) else (if "!a:~2,1!"=="" set m=0%%a)
  7. ren %%a_%%b !n!_!m!
  8. )
  9. pause
复制代码

作者: haole    时间: 2014-6-19 20:11

回复 2# 522235677

非常感谢!
第一个代码测试成功!

第二个有点问题:

我测试的文件夹刚开始如下图:
[attach]7330[/attach]

运行bat文件后,结果如下图:
[attach]7331[/attach]

再追问一下,如果处理文件,代码该如何修改
作者: 522235677    时间: 2014-6-19 20:30

回复 3# haole
  1.     @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=_" %%a in ('dir /ad /b *_*') do (
  3.         set a=%%a
  4.         if "!a:~1,1!"=="" (set n=00%%a) else (if "!a:~2,1!"=="" (set n=0%%a) else (set n=%%a))
  5.         set a=%%b
  6.         if "!a:~1,1!"=="" (set m=00%%a) else (if "!a:~2,1!"=="" (set n=0%%a) else (set m=%%a))
  7.         ren %%a_%%b !n!_!m!
  8. )
  9. pause
复制代码

作者: Batcher    时间: 2014-6-19 20:50

dir /ad /b 是处理文件夹
dir /a-d /b 是处理文件
作者: haole    时间: 2014-6-19 20:58

回复 3# haole

刚测试了一下,好像还是不行,下面是测试结果:
[attach]7332[/attach]
作者: haole    时间: 2014-6-19 20:59

回复 5# Batcher

哦,学习了,非常感谢
作者: apang    时间: 2014-6-19 21:59

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=_" %%a in ('dir /ad /b *_*') do (
  3.         set /a a=%%a+1000,b=%%b+1000
  4.         ren %%a_%%b !a:~-3!_!b:~-3!
  5. )
  6. pause
复制代码

作者: haole    时间: 2014-6-20 00:11

回复 8# apang


非常感谢,测试成功




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2