2016-01-25 3 views
1

У меня есть 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 Она удаляет файл, но не будет копировать новую. Если Rerun, то он копирует файл, так как его больше нет. Я попробовал несколько комбинаций попыток манипулировать операциями if и then без везения. Я также попытался удалить файл до раздела if безрезультатно. Будем очень благодарны любой помощи.

Если полный сценарий необходим, я могу предоставить, я только перечислил этот раздел, поскольку он является частью, которая неоднократно переигрывается. Также я знаю, что есть несколько сообщений, похожих на это, но я хочу выяснить, как обновить мой код для работы.

Update: Я установил перезапись с помощью CopyFile:

If oFSO.FileExists(sDestinationFile) Then 
    oFSO.CopyFile sSourceFile, sDestinationFile, True 
Else 
    oFSO.CopyFile sSourceFile, sDestinationFile, True 
    Set oFSO = Nothing 
End If 

Но я все еще получаю ошибки, если файл открыт, когда попытка перезаписать сделана.

ответ

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 
+1

Фантастическая [rcdmk] (http://stackoverflow.com/ пользователи/1046610/rcdmk)! Похоже, я слишком усложнял ситуацию. Время для еще кофе ... –