我正在尝试使用 vbscript (cscript/vbs) 将文件从一个网络位置(我的电视节目下载文件夹)复制到另一个网络位置(我的 pvr)。
我尝试使用 xcopy 但最终在没有任何上下文的情况下出现“解析错误”。尝试了一些方法,例如确保引用有空格的文件等无法解决。
我尝试使用 scripting.filesystemobject 的 copyfile 方法,但是由于“错误的文件名或编号”错误而失败,并且在谷歌上搜索这个导致了很多很多死胡同。
我目前正在尝试让 robocopy 来处理副本,因为它通常比上述两者都好。但是当使用 WScript.Shell 的 Run 方法从 cscript 中运行时,目标、文件名和参数都“脱落”。
所以这里是复制部分的一个片段。
if dirmatch > "" then
fileFrom = quote(myloc) ' & fil.name) 'fil.name will not need to be quoted
fileTo = quote(dirmatch) ' puts double-quotes around things if they have spaces in the name
' copyCommand = "%comspec% /k xcopy " & fileFrom & " " & fileTo & " /C /D /Y" ' returns "parse error"
copyCommand = "%comspec% /k robocopy " & fileFrom & " " & fileTo & " " & fil.name & " /R:3 /W:10"' /MOV"
logmsg copyCommand
oShellApp.run copyCommand
else
logmsg "no matching directory found for: " & fil.name
end if
fileFrom 和 fileTo 是我之前使用文件名解析计算的目录 - 格式为\\server\path\more path might have spaces\etc\etc
. fil.name 是文件,它从不包含空格 - 以点分隔。文件夹名称中的空格是我使用的另一个应用程序中匹配原因的要求。
所以一个给定的文件复制命令应该是这样的:
00:19: %comspec% /k robocopy \\qnap\qdownload\transmission\completed \\pvr\e\tv\MythBusters Mythbusters.S11E03.Hail.Hijinx.HDTV.x264-FQM.mp4 /R:3 /W:10
但是新命令窗口(例如cmd.exe /k
)中的 robocopy 会像这样抛出:
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Tue Oct 23 21:04:58 2012
Source : \\qnap\qdownload\transmission\completed\
Dest -
Files : *.*
Options : *.* /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
ERROR : No Destination Directory Specified.
我正确启动了它,但它看不到第一个参数。使用 copy 执行相同的命令可能会遇到相同的问题。
如何获取所有 robocopy 参数以传递给新的 cmd 实例?
ps 我的整个脚本在这里:http ://pastebin.com/xgpGJYmU :随意优化它!