使用VBS备份文件

时间:2015-07-01 15:21:30

标签: vbscript

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

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

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"

1 个答案:

答案 0 :(得分:1)

下一个代码段可以提供帮助(请参阅Arguments Property (WScript Object)InputBox FunctionMsgBox Function参考)。请注意,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...