【发布时间】: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