51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4583|回复: 10
打印 上一主题 下一主题

[原创] VBS脚本执行文件重命名操作

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-10-11 11:06:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Dim directory

Sub RenameFiles(dir)
Dim x,newname,i
i=1

Set fso =  CreateObject("Scripting.FileSystemObject")

If Not (fso.FolderExists(dir)) Then
   MsgBox "文件目录不存在!"
   Exit Sub
End If

Set fo = fso.GetFolder(dir) ' 得到文件夹

For Each x In fo.Files  
   newname = "pic_" & i & ".jpg"
   x.Name = newname

   i = i + 1
Next
MsgBox "批量重命名成功" & vbCrLf & "共重命名了" & fo.Files.Count & "个文件"
End Sub

'调用过程
directory = InputBox ("请输入文件夹路径")
If directory <> "" Then
   call RenameFiles(directory)
End If


问题
1、如何判断文件名是否存在呢
2、上述脚本执行后,有的时候重命名结果是从1000开始的,这是为什么呢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2010-10-11 11:19:01 | 只看该作者
都是从1开始的,不可能出现1000吧
判断文件存在,2个办法
1 是拿预期要改的文件名,改名前,遍历目录里所有文件名
2 是直接判断重名命的时候是否代码报错,如果出错就换文件名 err对象
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2010-10-11 11:29:58 | 只看该作者
都是从1开始的,不可能出现1000吧
判断文件存在,2个办法
1 是拿预期要改的文件名,改名前,遍历目录里所 ...
skyzhu 发表于 2010-10-11 11:19



   测试了下,当文件少的时候确实是从1开始的,如果文件多(测试了一个文件夹有700多图片),结果就是从1000开始的
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2010-10-11 11:40:17 | 只看该作者
收藏一个,多谢
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2010-10-11 11:40:26 | 只看该作者
收藏一个,多谢
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2010-10-11 11:57:12 | 只看该作者
文件多了。。。并不是从1000开始的,还是1,只是。。。他把重命名过的文件又去重命名了。。。
i  和  fo.Files.Count   根本匹配不上。。。
这个比较无奈,有空研究下
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2010-10-11 12:30:23 | 只看该作者
For Each x In fo.Files  
   newname = "pic_" & i & ".jpg"
   'MsgBox x.Name
   
   If StrComp(x.Name,newname)<>0 Then
   x.Name = newname
   num = num + 1
   End If
   
   i = i + 1
Next

这样判断是否文件名相同为什么无效呢? 还会报错误
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2010-10-11 13:23:45 | 只看该作者
你代码里那个意思只是和被操作的文件名比,并没遍历所有文件

可以用下面代码,但是,有重复的文件名会在之后被跳过,如需改造自己研究下

On Error Resume Next
For Each x In fo.Files  
    newname = "pic_" & i & ".jpg"
    x.Name = newname
    While Err
        Err.Clear
        i = i + 1
        newname = "pic_" & i & ".jpg"
        x.Name = newname
    Wend
    i = i + 1
Next
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2010-10-11 17:43:13 | 只看该作者
可不可以不用err
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2010-10-12 10:27:43 | 只看该作者
不用err效率会很差,执行的循环次数会是文件数量的平方,甚至更多
就是在重命名前,遍历文件夹里所有的文件名,发现一样的就继续换名
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2010-10-12 10:38:57 | 只看该作者
On Error Resume Next
For Each x In fo.Files  
    newname = "pics_" & i & ".jpg"
    x.Name = newname
    While Err
        Err.Clear
        i = i + 1
        newname = "pic_" & i & ".jpg"
        x.Name = newname
    Wend
    i = i + 1
Next

MsgBox "批量重命名成功"

这种办法,如果有重名,最后的提示显示不出来
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-26 07:25 , Processed in 0.073882 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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