使用 VBS 备份文件

Using VBS to Backup a file

我设法找到了这个脚本来使用和备份我的文件,这比我需要的要复杂一些。 我不需要输入备份路径 - 每次我 运行 它都是如此,但是这对于其他项目来说是一个方便的选项,但我想从设置的文件路径备份并保存到设置的文件路径节省时间。

此脚本的另一个问题是“取消”按钮不起作用,这是我之前遇到并修复的问题,但我不记得如何使“取消”按钮起作用。

Option Explicit
Dim objFSO, strSourceFolder, strDestFolder, strExclusion, strPrompt

Set objFSO = CreateObject("Scripting.FileSystemObject")

strSourceFolder = InputBox("Enter the Source directory path you wish to backup")

strDestFolder = InputBox("Enter the Destination directory path you wish to backup your Data to... (C:/Backup, //Backup-Server/Remotebackup")


Wscript.Echo "Click (OK) to start the Backup!"


CopyFolderStructure strSourceFolder, strDestFolder, strExclusion


Function CopyFolderStructure(strSource, strDestination, strExcludedExt)
Const OVER_WRITE_FILES = True
Dim objDir, objFolder, objFiles, strCurExt, intX, arrExt, blnExclude


Set objDir = objFSO.GetFolder(strSource)


 If Not objFSO.FolderExists(strDestination & "\" & objDir.Name) Then
    objFSO.CreateFolder(strDestination & "\" & objDir.Name)
End If

If Not IsNoData(strExcludedExt) Then

    arrExt = Split(strExcludedExt, ",")
    blnExclude = False      
End If

For Each objFiles In objFSO.GetFolder(strSource).Files

    If Not IsNoData(strExcludedExt) Then
        strCurExt = objFSO.GetExtensionName(objFiles.Name)  

        For intX = 0 To UBound(arrExt)
            If LCase(strCurExt) = arrExt(intX) Then
                blnExclude = True   
                Exit For
            Else
                blnExclude = False
            End If
        Next
        If Not blnExclude Then  
            objFSO.CopyFile strSource & "\" & objFiles.Name, strDestination & "\" & objDir.Name & "\" & objFiles.Name, OVER_WRITE_FILES
        End If
    Else    
        objFSO.CopyFile strSource & "\" & objFiles.Name, strDestination & "\" & objDir.Name & "\" & objFiles.Name, OVER_WRITE_FILES
    End If
Next

For Each objFolder In objFSO.GetFolder(strSource).SubFolders
    CopyFolderStructure objFolder.Path, strDestination & "\" & objDir.Name, strExcludedExt
Next
End Function

Function BrowseForFolderDialogBox(strTitle)
Const WINDOW_HANDLE = 0
Const NO_OPTIONS = &H0001
Dim objShellApp
Dim objFolder
Dim objFldrItem
Dim objPath

Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.BrowseForFolder(WINDOW_HANDLE, strTitle , NO_OPTIONS)
If IsNoData(objFolder) Then
    WScript.Echo "You choose to cancel. This will stop this script."
    Wscript.Quit
Else
    Set objFldrItem = objFolder.Self
    objPath = objFldrItem.Path
    BrowseForFolderDialogBox = objPath
    Set objShellApp = Nothing
    Set objFolder   = Nothing
    Set objFldrItem = Nothing
End If
End Function

Function IsNoData(varVal2Check)

On Error Resume Next
If IsNull(varVal2Check) Or IsEmpty(varVal2Check) Then
    IsNoData = True
Else
    If IsDate(varVal2Check) Then
        IsNoData = False
    Elseif varVal2Check = "" Then
        IsNoData = True
    ElseIf Not IsObject(varVal2Check) Then
        IsNoData = False
    Else
        IsNoData = False
    End If
End If
End Function   
Wscript.Echo "Backup Has Completed Successfully"

下一个代码片段可能会有所帮助(请参阅 Arguments Property (WScript Object), InputBox Function and MsgBox Function reference). Note that the Echo method 行为因您使用的 WSH 引擎而异。

Option Explicit
Dim objFSO, strSourceFolder, strDestFolder, strExclusion, strPrompt

Dim iBut, sRes, sMes, objArgs
sRes = Wscript.ScriptName
sMes = vbCRLF & "(click (Cancel) button to discard)"
Set objArgs = WScript.Arguments

If objArgs.Count > 1 Then
  strSourceFolder = objArgs( 0)
  strDestFolder   = objArgs( 1) 
Else
  strSourceFolder = "C:/DataToBackup"
  strDestFolder   = "D:/Backup" 
  strSourceFolder = InputBox( "Path you wish to backup" & sMes _
    , "Source directory", strSourceFolder)
  sRes = sRes & vbNewLine & "strSourceFolder """ & strSourceFolder & """"
  If strSourceFolder = "" Then
    strDestFolder = ""
  Else
    strDestFolder = InputBox( "Path you wish to backup your Data to" & sMes _
      , "Destination directory", strDestFolder)
    sRes = sRes & vbNewLine & "strDestFolder """ & strDestFolder & """" 
  End If
End If

If strDestFolder = "" Then
  sRes = sRes & vbNewLine & "Backup Cancelled!"
  Wscript.Echo sRes
  Wscript.Quit
Else
  iBut=MsgBox(sRes & sMes, vbOKCancel + vbQuestion _
    , "Click (OK) to start the Backup!")
  If iBut <> vbOK Then Wscript.Quit
End If

''''              for debugging only: 
Wscript.Quit '''' for debugging only:
''''              for debugging only: 

Set objFSO = CreateObject("Scripting.FileSystemObject")
CopyFolderStructure strSourceFolder, strDestFolder, strExclusion

'''''' and so on...