【问题标题】:Convert A Robocopy Command to VB Script将 Robocopy 命令转换为 VB 脚本
【发布时间】:2013-11-04 05:03:05
【问题描述】:

我曾经在 Robocopy 中使用了一行,它允许我复制文件夹中的所有文件夹,包括父文件夹,即 Blackberry 文件夹中的所有文件/文件夹,包括 Blackberry 文件夹本身,否则它只会复制中的文件并将它们转储到备份位置...

使用的代码是;

for %%a in ("%source%") do SET destination="Backups\%date%\%%~nxa"

现在我有了 VB 脚本; sSource = Chr(34) & objFolder.self.Path & Chr(34) & " "

那么我将如何让 VB 脚本(仍称为 Robocopy)使用上述内容,以便在备份时也包含 PARENT 文件夹?

这是我的代码; Converting Robocopy Batch To VB Script

提前致谢!

编辑:我的脚本文件的当前内容;

Dim BrowseBackupSource

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "Please browse to the folder you would like to backup.", 1, "C:\")
If objFolder Is Nothing Then
    Wscript.Quit
End If
wscript.Echo "folder: " & objFolder.title & " Path: " & objFolder.self.path

Dim BrowseBackupLocation

Set objShell = CreateObject("Shell.Application")
Set objDest = objShell.BrowseForFolder(0, "Please browse to the folder you would like to save the backup to.", 1, "C:\")
If objDest Is Nothing Then
    Wscript.Quit
End If
wscript.Echo "folder: " & objDest.title & " Path: " & objDest.self.path

sCmd = "%windir%\System32\Robocopy.exe "
sDate = Day(Now) & "-" & Month(Now) & "-" & Year(Now)
sTime = Hour(Now) & "-" & Minute(Now) & "-" & Second(Now)
sSource = Chr(34) & objFolder.self.Path & Chr(34) & " "
sDestination = Chr(34) & objDest.self.Path & Chr(34) & " "
sSwitches = "/E /Log:"& sTime &".txt"

Set objShell = CreateObject("Wscript.Shell")
objShell.Run(sCmd & sSource & sDestination & sSwitches)

【问题讨论】:

    标签: vbscript cmd robocopy


    【解决方案1】:

    如果您想创建特定文件夹的副本以进行备份,为什么不将该文件夹简单地复制到备份目标并完成它?

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set app = CreateObject("Shell.Application")
    
    dst = "C:\backups\" & Year(Now) & "\" & Month(Now) & "\" & Day(Now)
    CreatePath dst
    
    Set fldr = app.BrowseForFolder(0, "Example", 1, "c:\Programs")
    fso.CopyFolder fldr.Self.Path, dst & "\", True
    
    Sub CreatePath(p)
      If Not fso.FolderExists(p) Then
        CreatePath fso.GetParentFolderName(p)
        fso.CreateFolder p
      End If
    End Sub
    

    【讨论】:

    • 你们可以看看我上面的代码并建议我如何在我的代码中实现你的或下面的答案以获得预期的效果吗? :)
    • 您好@Ansgar Wiechers,感谢您的回复! :) 我基本上只是想在 VB Script 中制作(转换)一个脚本,它会询问用户他们想要备份的源目录,然后询问他们的输出目录。显然它需要复制父文件夹本身,并将其备份(镜像)到另一个位置。稍后(或者现在,如果它很容易实现)我想允许一次选择多个目录,或者有一个拖放功能来放置你想要备份的文件夹......这几乎就是我想做的。 :)
    • 顺便说一句,我在上面测试了你的代码,虽然它完成了工作(我可以添加“浏览备份位置”)唯一的问题是它没有进度报告或报告,所以我'不确定与带有这些功能(开关等)并且可以轻松调用的 Robocopy 相比,实现起来有多难......
    【解决方案2】:

    好吧,如果您需要将父文件夹的路径设置为副本的根目录:

    dim parentFolderPath
    
        parentFolderPath = WScript.CreateObject("Scripting.FileSystemObject").GetFolder(objFolder.self.Path).ParentFolder.Path
    

    编辑

    您需要将所选源目录的名称添加到所选目标的路径中,以便

    Set fso = WScript.CreateObject("Scripting.FileSystemObject")
    sSourceFolderName = fso.GetFolder(objFolder.self.Path).Name
    sDestination = Chr(34) & objDest.self.Path & "\" & sSourceFolderName & Chr(34)
    

    Robocopy 将处理目标目录的创建

    【讨论】:

    • 你们可以看看我上面的代码,并建议我如何在我的代码中实现你的或下面的答案以获得预期的效果吗? :)
    • 您好,感谢您的回复!所以我当前的代码是:pastebin.com/TESywtpQ 但是,随着您的修复实施,现在它做了一些我无法弄清楚的奇怪事情!它完美地复制了它的父文件夹,但是,它在父文件夹中添加了一个“E”文件夹,并且在该“E”文件夹中是内容,而内容应该只是进入父文件夹......例如,你想要 C :\Test 它将备份到;位置:\Test\E\{CONTENT} 有什么原因,以及如何解决这个问题?
    • 尝试在 /e 开关前放置一个空格
    • 我喜欢这些问题是多么简单,哈哈哈,哇,我一直在看左右中间!伙计,这绝对让我大开眼界,对未来的项目有帮助,非常感谢!!!我真的很感激它,伙计!希望你有一个美好的一天! :)
    猜你喜欢
    • 2013-11-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 2015-11-16
    相关资源
    最近更新 更多