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

[文件操作] 【已解决】求助BAT批量命名文件夹

[复制链接]
发表于 2013-5-8 00:44:15 | 显示全部楼层 |阅读模式
本帖最后由 001011 于 2013-5-8 17:58 编辑

附件“测试.xls”中的A列是读取  E:\测试\ 路径后的结果   
B列是想要改名的结果
首先读取路径中的文件夹及子文件夹(路径深度如附件“测试.xls”中的A列)
改名的规则按照B列的规则改

抱歉 我没有表达清楚问题
首先 我有一个文件夹E:\测试
E:\测试 下面有N个文件夹 这N个文件夹里面又有N个文件夹,路径格式如A列那样
E:\测试\0100-8222-001
E:\测试\0100-8222-001\00001A
E:\测试\0100-8222-001\00016A
E:\测试\0100-8222-001\00032A
E:\测试\0100-8222-001\00047A
E:\测试\0100-8222-001\00062A
我要改的文件夹名是 最后一级文件夹的名字
改名字的规则是:
E:\测试\0100-8222-001
E:\测试\0100-8222-001\0100-8222-001-001
E:\测试\0100-8222-001\0100-8222-001-002
E:\测试\0100-8222-001\0100-8222-001-003
E:\测试\0100-8222-001\0100-8222-001-004
E:\测试\0100-8222-001\0100-8222-001-005
我想要的是
比如
E:\测试\0100-8222-001\00001A
改成
E:\测试\0100-8222-001\0100-8222-001-001
也就是把00001A改成0100-8222-001-001
规律是获取上一级文件夹的名字 然后加上:“-001”

下一个就是
E:\测试\0100-8222-001\00016A
改成
E:\测试\0100-8222-001\0100-8222-001-002
规律是获取上一级文件夹的名字 然后加上:“-002”
依此类推

谢谢

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-5-8 14:55:58 | 显示全部楼层
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set xls = CreateObject("Excel.Application")
  3. xls.Visible = False
  4. xls.WorkBooks.Open("d:\测试.xls")
  5. xls.WorkSheets(1).Activate

  6. i = 1
  7. Do Until xls.Cells(i,1).Value = ""
  8.    ReDim PreServe ar(i)
  9.    ar(i) = xls.Cells(i,1).Value & "*" & xls.Cells(i,2).Value
  10.    i = i + 1
  11. Loop
  12. xls.quit :Set xls = Nothing

  13. For i = 1 to UBound(ar) - 1
  14.    For j = i + 1 to UBound(ar)
  15.       If Split(ar(i),"*")(0) < Split(ar(j),"*")(0) Then
  16.          Tmp = ar(i) : ar(i) = ar(j) : ar(j) = Tmp
  17.       End If
  18.    Next
  19. Next

  20. For i = 1 to UBound(ar)
  21.    NewName = Split(ar(i),"")(UBound(Split(ar(i),"")))
  22.    If fso.FolderExists(Split(ar(i),"*")(0)) Then
  23.       If fso.GetFolder(Split(ar(i),"*")(0)).Name <> NewName Then
  24.          fso.GetFolder(Split(ar(i),"*")(0)).Name = NewName
  25.       End If
  26.    End If
  27. Next

  28. MsgBox "OK"
复制代码
 楼主| 发表于 2013-5-8 16:31:05 | 显示全部楼层
回复 2# apang
感谢您
我的问题没有表达清楚  是我的错
我上传的测试.xls  只是为了说明问题  不是我本身就有这个表格了
我已经把问题从新描述了  麻烦您再帮忙解答一下  谢谢
发表于 2013-5-8 17:20:08 | 显示全部楼层

  1. @echo off
  2. for /d %%a in (*) do (
  3.   pushd.
  4.   cd /d "%%a"&set "n=1000"
  5.   setlocal enabledelayedexpansion
  6.   for /d %%b in (*) do (
  7.     set /a n+=1
  8.     ren "%%b" "%%a-!n:~1!"
  9.   )
  10.   endlocal
  11.   popd
  12. )
复制代码
 楼主| 发表于 2013-5-8 17:30:24 | 显示全部楼层
回复 4# xxpinqz
非常感谢  您的代码很好
您这个只能处理一个文件
就是  我会有N个E:\测试这样的文件夹  可以批量吗
发表于 2013-5-8 17:46:21 | 显示全部楼层
回复 [url=]5#[/url] 001011
未说明测试文件夹分布情况,使用拖放方式

  1. @echo off
  2. rem 操作方式:拖动需要重命名的文件夹至批处理图标上,可多个
  3. :loop
  4. if "%~1"=="" goto :eof
  5. cd /d "%~1"||(echo 非法目录名称或不存在此目录&pause&goto :eof)
  6. for /d %%a in (*) do (
  7.   pushd.
  8.   cd /d "%%a"&set "n=1000"
  9.   setlocal enabledelayedexpansion
  10.   for /d %%b in (*) do (
  11.     set /a n+=1
  12.     ren "%%b" "%%a-!n:~1!"
  13.   )
  14.   endlocal
  15.   popd
  16. )
  17. shift /1
  18. goto loop
复制代码

评分

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

查看全部评分

 楼主| 发表于 2013-5-8 17:58:10 | 显示全部楼层
非常感谢  非常好用  谢谢啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 06:21 , Processed in 0.020676 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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