文件夹副本

时间:2009-08-10 09:42:02

标签: vbscript

以下是VBScript代码。如果文件/文件夹存在,我会收到脚本错误,“文件已经存在”。

  • 如何解决这个问题?
  • 如果仅在文件夹不存在的情况下创建文件夹,并且只复制新文件或源文件路径中不存在的文件?
  • 如何在“欢迎”和(点3)之后插入用户名(第1点)而不是用户取消?
  • 按钮可以更改为复制,更新,取消而不是是,否,取消? (第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 个答案:

答案 0 :(得分:1)

  

如果文件夹不存在,如何创建文件夹

这是您的代码:

objFSO.FolderExists("E:\Updates")
if TRUE then objFSO.CreateFolder ("E:\Updates")

只需按顺序调用FolderExistsCreateFolder方法(CreateFolder总是被调用,因为if TRUE条件的计算结果为True)并且等于:

objFSO.FolderExists("E:\Updates")
objFSO.CreateFolder ("E:\Updates")

您想根据CreateFolder方法的返回值来致电FolderExists

If Not objFSO.FolderExists("E:\Updates") Then
   objFSO.CreateFolder "E:\Updates"
  

并仅复制源路径中新的或不存在的文件?

VBScript和FileSystemObject对象都没有此功能。但是,可以使用WshShell.Run方法从脚本中调用可以执行此操作的外部工具,例如xcopy。我想你需要这样的东西:

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功能提示用户执行他们希望执行的任务。您可以找到示例here

我还要注意,您可以使用Select Case语句检查MsgBox返回值而不是多个If...Then...End If语句来改进脚本。此外,使用像6或7这样的“幻数”是一种不好的做法 - 使用适当的常量代替。例如:

Select Case X
  Case vbYes
     ...
  Case vbNo
     ...
  Case Else ' vbCancel
     ...
End Select

答案 1 :(得分:0)

当你说

  

“仅复制新文件或执行此操作   在源路径中不存在?“

您是否只想将文件从源目录复制到目标目录(如果目标中不存在)?如果是这样,那就完成了

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

添加了请求的日期检查。