我有VBScript,我写了很久才回来识别基于文件名的PDF。然后它将数据附加到文件名并将其移动到正确的目录。我把它作为Select Case
来做,以便循环许多文件名。我现在正在尝试修改脚本以检查具有新名称的文件是否已经在目标目录中,如果是,则删除旧文件,然后复制新文件(如果文件已打开且可以'被覆盖,忽略并移动到下一个)。我一直在很多论坛上搜索,并且能够找到我正在尝试的内容,但是无法将这些过程成功地集成到我的脚本中。这是我对我的选择案例所拥有的内容,这一部分是使用" VariableAddedtoFileName"重复的内容。改变。
Select Case Pname
Case "FileName"
sDestinationFolder = "\\Server\FileDir\"
sDestinationName = "VariableAddedtoFileName"
Set oFSO = CreateObject("Scripting.FileSystemObject")
sSourceFile = objStartFolder & "\" & objFile.Name
sDestinationFile = sDestinationFolder & "\" & Pname & " " & _
sDestinationName & Right(objFile.Name, 4)
If oFSO.FileExists(sDestinationFile) Then
Set oFSO = Nothing
Else
oFSO.MoveFile sSourceFile, sDestinationFile
Set oFSO = Nothing
End If
Case "StatementScriptTest"
Case Else
End Select
因此,如果我将Set oFSO
组中的If oFSO.FileExists
行更改为oFSO.DeleteFile sDestinationFile
它会删除该文件,但不会复制新文件。如果重新运行,它会复制该文件,因为它不再存在。我尝试过多次试图操纵if
语句和then
而没有运气的组合。我还尝试在if
部分之前删除该文件,但没有用。非常感谢任何帮助。
如果我需要提供完整的脚本,我只列出了这一部分,因为它是多次重新运行的部分。另外我知道有很多类似的帖子,但我想弄清楚如何更新我的代码。
更新:我已使用CopyFile
修正了覆盖:
If oFSO.FileExists(sDestinationFile) Then
oFSO.CopyFile sSourceFile, sDestinationFile, True
Else
oFSO.CopyFile sSourceFile, sDestinationFile, True
Set oFSO = Nothing
End If
但是,如果在尝试覆盖时文件是打开的,我仍然会收到错误。
答案 0 :(得分:3)
首先,如果每个分支中的代码都相同,则不需要IF
语句。只需使用oFSO.CopyFile sSourceFile, sDestinationFile, True
,它就会为您完成工作。
其次,为了捕获错误,您必须在复制命令之前使用On Error Resume Next
声明并检查是否触发了一些错误:
On Error Resume Next ' this tells VB to not throw errors and to populate the Err object when an error occurs
oFSO.CopyFile sSourceFile, sDestinationFile, True
IF Err.Number <> 0 Then
' do something when error occurs
' ...
Err.Clear ' clears the error so it will not trigger this on the loop if no more errors occur
End IF
' When you want to stop ignoring the errors
On Error GoTo 0