Копирование файловой папки
Ниже приведен код VBScript. Если файл / файлы или папка существуют, я получаю сообщение об ошибке "Файл уже существует".
- Как это исправить?
- Как создать папку, только если она не существует, и скопировать только те файлы, которые являются новыми или не существуют в исходном пути?
- Как вставить имя пользователя (точка 1) после "Добро пожаловать" и в (пункт 3) вместо отмены пользователя?
- Можно ли изменить кнопки на Копировать, Обновить, Отменить вместо Да, Нет, Отмена? (Пункт 2)
Код:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set wshShell = WScript.CreateObject( "WScript.Shell" )
strUserName = wshShell.ExpandEnvironmentStrings( "%USERNAME%" )
Message = " Welcome to the AVG Update Module" & vbCR '1*
Message = Message & " *****************************" & vbCR & vbCR
Message = Message & " Click Yes to Copy Definition Files" & vbCR & vbCR
Message = Message & " OR " & vbCR & vbCR
Message = Message & " Click No to Update Definition Files." & vbCR & vbCR
Message = Message & " Click Cancel (ESC) to Exit." & vbCR & vbCR
X = MsgBox(Message, vbYesNoCancel, "AVG Update Module") '2*
'Yes Selected Script
If X = 6 then
objFSO.FolderExists("E:\Updates")
if TRUE then objFSO.CreateFolder ("E:\Updates")
objFSO.CopyFile "c:\Docume~1\alluse~1\applic~1\avg8\update\download\*.*",
"E:\Updates\" , OverwriteFiles
MsgBox "Files Copied Succesfully.", vbInformation, "Copy Success"
End If
'No Selected Script
If X = 7 then
objFSO.FolderExists("Updates")
if TRUE then objFSO.CreateFolder("Updates")
objFSO.CopyFile "E:\Updates\*.*", "Updates", OverwriteFiles
Message = "Files Updated Successfully." & vbCR & vbCR
Message = Message & "Click OK to Launch AVG GUI." & vbCR & vbCR
Message = Message & "Click Cancel (ESC) to Exit." & vbCR & vbCR
Y = MsgBox(Message, vbOKCancel, "Update Success")
If Y = 1 then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\Progra~1\avg\avg8\avgui.exe" & Chr(34), 0
Set WshShell = Nothing
End if
If Y = 3 then WScript.Quit
End IF
'Cancel Selection Script
If X = 2 then
MsgBox "No Files have been Copied/Updated.", vbExclamation, "User Cancelled" '3*
End if
2 ответа
Как создать папку, только если она не существует
Это твой код:
objFSO.FolderExists("E:\Updates")
if TRUE then objFSO.CreateFolder ("E:\Updates")
просто называет FolderExists
а также CreateFolder
методы в последовательности (CreateFolder
всегда называется, потому что if TRUE
условие оценивается как Истина) и равно:
objFSO.FolderExists("E:\Updates")
objFSO.CreateFolder ("E:\Updates")
Вы хотите позвонить CreateFolder
в зависимости от возвращаемого значения FolderExists
метод:
If Not objFSO.FolderExists("E:\Updates") Then
objFSO.CreateFolder "E:\Updates"
и копировать только те файлы, которые являются новыми или не существуют в исходном пути?
Ни VBScript, ни FileSystemObject
Объект имеет эту функциональность. Тем не менее, можно вызвать внешний инструмент, который может сделать это, такой как xcopy
из вашего скрипта, используя WshShell.Run
метод. Я думаю, вам нужно что-то вроде этого:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "xcopy c:\Docume~1\alluse~1\applic~1\avg8\update\download\*.* E:\Updates\ /D", , True
Как вставить имя пользователя (пункт 1)
Объединить текст сообщения с strUserName
значение переменной:
Message = " Welcome " & strUserName & " to the AVG Update Module" & vbCR
...
MsgBox "No Files have been Copied/Updated.", vbExclamation, strUserName & " Cancelled"
Можно ли изменить кнопки на Копировать, Обновить, Отменить вместо Да, Нет, Отмена?(Пункт 2)
Нет, VBScript встроен MsgBox
Функция не поддерживает пользовательские кнопки. Однако есть обходные пути: вы можете создать свое собственное окно сообщения, используя HTA (приложение HTML) или использовать InputBox
функция для запроса пользователя о задаче, которую он хочет выполнить. Вы можете найти примеры здесь.
Я также хотел бы отметить, что вы можете улучшить свой сценарий, используя Select Case
заявление, чтобы проверить MsgBox
возвращаемое значение вместо нескольких If...Then...End If
заявления. Также не рекомендуется использовать "магические числа", такие как 6 или 7, - вместо этого используйте соответствующие константы. Например:
Select Case X
Case vbYes
...
Case vbNo
...
Case Else ' vbCancel
...
End Select
Когда ты сказал
msgstr "копировать только те файлы, которые являются новыми или не существуют в исходном пути?"
Вы имеете в виду, что хотите копировать файлы только из исходного каталога в каталог назначения, если они не существуют в месте назначения? Если это так, то это будет достигнуто
Const SourceFolder = "C:\Test1\"
Const DestinationFolder = "C:\Test2\"
Set fso = CreateObject("Scripting.FileSystemObject")
'Get a collection of al the files in the source directory
Set fileCol = fso.GetFolder(SourceFolder).Files
'Loop through each file and check to see if it exists in the destination directory
For Each objFile in fileCol
If NOT fso.FileExists(DestinationFolder & objFile.Name) Then
'If the file does not exist in the destination directory copy it there.
objFile.Copy DestinationFolder
Else
If objFile.DateLastModified > fso.GetFile(DestinationFolder & objFile.Name).DateLastModified Then
'If the file is newer than the destination file copy it there
objFile.Copy DestinationFolder, True
End If
End If
Next
Set fileCol = Nothing
Set fso = Nothing
Добавлена запрошенная проверка даты.