我正在尝试转换我仍在处理的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复制文件,但源是基于用户输入(因此选择文件夹选项)。我还想添加一个“目的地”选项,你指定备份到哪里......但这确实是可选的,我确信如果我把第一个问题排序,我可以弄明白。
提前感谢您提供任何帮助!
答案 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
因此,不是转换批次,而是利用您可用的工具,使其具有成本效益。