首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB脚本文件系统对象"MoveFile“方法授予权限拒绝错误

VB脚本文件系统对象"MoveFile“方法授予权限拒绝错误
EN

Stack Overflow用户
提问于 2015-10-26 14:33:11
回答 2查看 3.3K关注 0票数 1

我已经编写了一个小脚本来重命名一个文件,它基于一个ID号。我以前从来没有和vbs合作过,所以我仍然对它很陌生。我已经解决了大部分问题,直到MoveFile命令结束之前,一切都在正常工作。为了测试目的,我将文件保存到C:\temp,并尝试将moveFile返回到C:。这是不允许的吗?这是我的代码:

代码语言:javascript
复制
Dim objFSO,foldername, folder, objFile, tsfiles, f1, textfile, line, filename, destinationfile
foldername = "C:\Temp"
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set folder = objFSO.GetFolder(foldername)
Set tsfiles = folder.Files

For each f1 in tsfiles
    filename = f1.name
    textfile = foldername + "\" + filename
    If Instr(f1.name, ".TS") <> 0 Then
        Set objFile = objFSO.OpenTextFile((textfile), ForReading)

        Do Until objFile.AtEndOfStream
            objFile.ReadLine
            line = objFile.ReadLine
            If Instr(line, "RECORDER ID:") <> 0 Then
                Dim RID 
                RID = trim(Mid(line, 15, 15))
                destinationfile = foldername + "\" + RID + ".txt"
                MsgBox(destinationfile)
                objFSO.MoveFile textfile, destinationfile
                objFile.close
            End If
        Loop
    End if
Next
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-26 14:46:19

您正在打开然后是文本文件,当它仍然打开时,您尝试移动它。你得在移动它之前关闭它。

而且,这并不限于vbscript,但是通常,在系统驱动器中移动文件(在您的例子中,C:)需要管理员权限。我认为这些规则是在Windows之后强制执行的,所以您可能还需要作为管理员运行脚本。

票数 1
EN

Stack Overflow用户

发布于 2016-01-29 01:43:33

要以admin的形式运行,您需要右键单击它,特别是以admin的形式运行。

在您的代码中,您试图在打开时移动。如果您关闭它,这是fie,但是它继续通过循环,当它试图访问打开的文件时,它会失败。所以你需要关闭它并打破循环。Exit Do将从循环中脱离出来,这样它就不会返回并尝试根据已关闭的对象计算objFile.AtEndOfStream

代码语言:javascript
复制
Dim objFSO,foldername, folder, objFile, tsfiles, f1, textfile, line, filename, destinationfile
foldername = "C:\Temp"
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set folder = objFSO.GetFolder(foldername)
Set tsfiles = folder.Files

For each f1 in tsfiles
    filename = f1.name
    textfile = foldername + "\" + filename
    If Instr(f1.name, ".TS") <> 0 Then
        Set objFile = objFSO.OpenTextFile((textfile), ForReading)

        Do Until objFile.AtEndOfStream
            objFile.ReadLine
            line = objFile.ReadLine
            If Instr(line, "RECORDER ID:") <> 0 Then
                Dim RID 
                RID = trim(Mid(line, 15, 15))
                destinationfile = foldername + "\" + RID + ".txt"
                MsgBox(destinationfile)
                objFile.close
                objFSO.MoveFile textfile, destinationfile
                Exit Do
            End If
        Loop
    End if
Next
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33348346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档