3

我正在尝试转换我仍在处理的 BATCH 文件(问题在Robocopy | Mirror Destination Include 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 复制文件,但源基于用户输入(因此选择文件夹选项)。我还想添加一个“目标”选项,您可以指定备份到的位置...但这确实是可选的,我敢肯定,如果我对第一个问题进行排序,我可以弄清楚这一点。

提前感谢您的任何帮助!

4

1 回答 1

1

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

RoboCopy GUI 存在。

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

这是 VB Script 的简单使用。

请参阅此提示用户选择文件夹。 VBScript 打开一个对话框来选择一个文件路径

一旦您了解如何使用此链接上其他用户推荐的代码。简要介绍我的疯狂...提示您要保存的文件夹并将其吐出到一个名为 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

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

于 2014-10-25T22:24:03.840 回答