我编写了一个小脚本,根据其中的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
答案 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