将Robocopy批量转换为VB脚本

时间:2013-10-23 09:42:23

标签: batch-file vbscript cmd robocopy

我正在尝试转换我仍在处理的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复制文件,但源是基于用户输入(因此选择文件夹选项)。我还想添加一个“目的地”选项,你指定备份到哪里......但这确实是可选的,我确信如果我把第一个问题排序,我可以弄明白。

提前感谢您提供任何帮助!

1 个答案:

答案 0 :(得分: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

因此,不是转换批次,而是利用您可用的工具,使其具有成本效益。