VB脚本文件系统对象“MoveFile”方法给出权限被拒绝错误

时间:2015-10-26 14:33:11

标签: vbscript

我编写了一个小脚本,根据其中的ID号重命名文件。我之前从未使用过vbs,所以我对它仍然很不熟悉。我已经解决了大部分问题,一切正常,直到最后的MoveFile命令。仅出于测试目的,我将文件保存到C:\ temp并尝试将文件移动回C:。这是不允许的还是什么? 这是我的代码:

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

2 个答案:

答案 0 :(得分:0)

您正在打开文本文件,并且您尝试在它仍处于打开状态时移动它。在移动它之前你必须关闭它。

此外,这不是特定于vbscript,但通常,在系统驱动器中移动文件(在您的情况下为C :)需要管理员权限。我认为这些规则已在Windows XP之后实施,因此您可能还需要以管理员身份运行该脚本。

答案 1 :(得分:0)

要以管理员身份运行,您需要右键单击它并专门以管理员身份运行。

在您的代码中,您正试图在它打开时移动。如果你关闭它,那就是fie但是它继续经历循环,当它试图访问打开的文件时它失败了。所以你需要关闭它打破循环。 Exit Do将突破循环,因此它不会返回并尝试针对已关闭的对象评估objFile.AtEndOfStream

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