【问题标题】:Converting Robocopy Batch To VB Script将 Robocopy 批处理转换为 VB 脚本
【发布时间】:2013-11-01 12:34:03
【问题描述】:

我正在尝试转换我仍在处理的 BATCH 文件(Robocopy | Mirror Destination Including Source Parent Folder 的问题)。

我已经取得了一些进展,我转向 VB 的原因是添加更多功能,例如添加一个对话框以要求用户浏览他们想要备份的文件夹...

现在是我目前拥有的代码(仅部分从我的原始 .bat 文件转换而来);

Dim Command1

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "Example", 1, "c:\Programs")
If objFolder Is Nothing Then
    Wscript.Quit
End If
wscript.Echo "folder: " & objFolder.title & " Path: " & objFolder.self.path

sCmd = "%windir%\System32\Robocopy.exe "
sDate = Day(Now) & "-" & Month(Now) & "-" & Year(Now)
sTime = Hour(Now) & "-" & Minute(Now) & "-" & Second(Now)
sSource = objFolder & " "
sDestination = "Backups\"& Year(Now) &"\"& Month(Now) &"\"& Day(Now) &"\ "
sLogDir = "Backups\Logs\"& Year(Now) &"\"& Month(Now) &"\"& Day(Now) &"\ "
sSwitches = "/SEC /E /Log:"& sTime &".txt"

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

我的问题是根据日志文件会发生这种情况;

Source = G:\test\delete\
Dest = G:\test\Backups\2013\10\23\

同时真正的来源是;

C:\Users\User\Desktop\delete

所以我想弄清楚为什么它将“G:\test”(运行 .vbs 的文件夹)附加到其源。

总而言之,我的目标是让 Robocopy 复制文件,但源基于用户输入(因此选择文件夹选项)。我还想添加一个“目标”选项,您可以指定备份到的位置...但这确实是可选的,如果我对第一个问题进行排序,我相信我可以弄清楚。

提前感谢您的所有帮助!

【问题讨论】:

  • 也许sSource = objFolder.self.Path & " "
  • 谢谢你,你是明星!!!但是,它似乎只适用于其中没有空格的文件夹...... :( 如果我有一个带空格的文件夹名称,比如“Big Pictures”或其他什么,它什么也不做。
  • 对不起。 sSource = Chr(34) & objFolder.self.Path & Chr(34) & " " 。如果 source 包含空格,则调用 robocopy 时,需要用引号将路径括起来。
  • 这又是一个魅力!我真的需要研究和弄清楚这些事情,不过,值得称赞的是,我最初确实尝试了双引号 "" "" 并且确实阅读了有关 Chr(34) 的信息以取消它。 :) 现在,如果我能弄清楚为什么在 Windows 8 下尝试复制任何文件时,它会被拒绝访问? UAC 未启用,Win8 是否使用脚本做一些时髦的事情?或者我需要添加什么以确保它正常工作,因为没有“以管理员身份运行”上下文菜单选项。 :(
  • 您应该调查导致您访问被拒绝的原因。它可以是源文件读取、目标文件写入、访问控制更改(您正在使用 /SEC)、写入日志文件,...

标签: batch-file vbscript cmd robocopy


【解决方案1】:

如果它可以节省您的任何时间...

RoboCopy GUI 存在。

http://technet.microsoft.com/en-us/magazine/2006.11.utilityspotlight.aspx

这是对 VB Script 的简单使用。

请参阅此处以提示用户选择文件夹。 VBScript to open a dialog to select a filepath

一旦您了解如何使用此链接上其他用户推荐的代码。简要介绍我的疯狂...提示您要保存的文件夹并将其吐出到名为 Input 的批处理中,然后再次提示保存备份的位置。然后像这样调用那个批处理文件:

Call input.bat

在您的 RoboCopy 行之前。

让我们确定如何利用 vb 代码。

'Open Windows Shell Script object
    Set wShell=CreateObject("WScript.Shell")
'Executes the MS HTML Application exe to leverage capabilities to select a file.
    Set iExec=wShell.Exec("mshta.exe ""about:<input type=file id=FILE><script>FILE.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>""")
'Sets First Prompt for source reference
    srcepath = iExec.StdOut.ReadLine
    Set oExec=wShell.Exec("mshta.exe ""about:<input type=file id=FILE><script>FILE.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>""")
'Sets Second Prompt for destination reference
    destpath = oExec.StdOut.ReadLine
    Set wShell=Nothing

简单的 VBS 调整以从提示中保存 input.bat。

'This will open the new bat file as txt and write.
    const forwriting = 2
    set fso = CreateObject("Scripting.FileSystemObject")
    set output = fso.OpenTextFile("input.bat", ForWriting, True)
    output.writeline "set srcepath=" & srcepath
    output.writeline "set destpath=" & destpath

因此,与其转换您的批次,不如利用您可用的工具并使其对您的工作具有成本效益。

【讨论】:

    猜你喜欢
    • 2013-11-04
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多