Vbscript 如果目标存在,则删除,如果错误,则复制到目标移动到下一个

Vbscript 如果目标存在,则删除,如果错误,则复制到目标移动到下一个,vbscript,fso,Vbscript,Fso,我有一个VBScript,很久以前我写过它来根据文件名识别PDF。然后将数据附加到文件名,并将其移动到正确的目录。我把它作为一个selectcase来执行,以便它循环使用许多文件名。我现在正试图修改脚本,以检查具有新名称的文件是否已在目标目录中,如果已在目标目录中,请删除旧文件并复制新文件(如果文件已打开且无法覆盖,请忽略并移动到下一个)。我一直在许多论坛上搜索,能够找到我正在尝试的部分内容,但无法成功地将这些过程集成到我的脚本中。这是我所选择的案例的内容,这部分内容随着“VariableAdd

我有一个VBScript,很久以前我写过它来根据文件名识别PDF。然后将数据附加到文件名,并将其移动到正确的目录。我把它作为一个
selectcase
来执行,以便它循环使用许多文件名。我现在正试图修改脚本,以检查具有新名称的文件是否已在目标目录中,如果已在目标目录中,请删除旧文件并复制新文件(如果文件已打开且无法覆盖,请忽略并移动到下一个)。我一直在许多论坛上搜索,能够找到我正在尝试的部分内容,但无法成功地将这些过程集成到我的脚本中。这是我所选择的案例的内容,这部分内容随着“VariableAddedtoFileName”的更改而重复

因此,如果我将
if of So.FileExists
组中的
Set of So
行更改为
oFSO.DeleteFile-destinationfile
,它将删除该文件,但不会复制新文件。如果重新运行,它将复制该文件,因为它不再存在。我尝试了多种组合,试图操纵
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

但是,如果在尝试覆盖时文件处于打开状态,我仍然会出错。

首先,如果每个分支中都有相同的代码,则不需要使用
if
语句。只需使用so.CopyFile sSourceFile、sDestinationFile和True的
,它就能为您完成工作

其次,为了捕获错误,您必须在copy命令之前使用
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
On Error Resume Next'这告诉VB不要抛出错误,并在发生错误时填充Err对象
oFSO.CopyFile sSourceFile,sDestinationFile,True
如果错误号为0,则
“发生错误时做点什么
' ...
Err.Clear'清除错误,因此如果不再发生错误,它将不会在循环中触发此错误
如果结束
'当您要停止忽略错误时
错误转到0
太棒了!看来我把事情复杂化了。是时候再来点咖啡了。。。
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