我已经编写了一个小脚本来重命名一个文件,它基于一个ID号。我以前从来没有和vbs合作过,所以我仍然对它很陌生。我已经解决了大部分问题,直到MoveFile命令结束之前,一切都在正常工作。为了测试目的,我将文件保存到C:\temp,并尝试将moveFile返回到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发布于 2015-10-26 14:46:19
您正在打开然后是文本文件,当它仍然打开时,您尝试移动它。你得在移动它之前关闭它。
而且,这并不限于vbscript,但是通常,在系统驱动器中移动文件(在您的例子中,C:)需要管理员权限。我认为这些规则是在Windows之后强制执行的,所以您可能还需要作为管理员运行脚本。
发布于 2016-01-29 01:43:33
要以admin的形式运行,您需要右键单击它,特别是以admin的形式运行。
在您的代码中,您试图在打开时移动。如果您关闭它,这是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
Nexthttps://stackoverflow.com/questions/33348346
复制相似问题