0

我正在尝试创建一个将文件复制到另一个系统的小程序。系统名称是先前选择的(是一个变量 = “testsystem”)。我有这个子和功能:

Sub tst
    Dim copythis
    copythis = "xcopy.exe /Y c:\temp\version.bat " & testsystem & "\temp"
    Set objShell = CreateObject("Wscript.Shell")
    Msgbox AddQuotes(copythis)
    objShell.Run AddQuotes(copythis)
End Sub

Function AddQuotes(strInput)
    AddQuotes = Chr(34) & strInput & Chr(34)
End Function

messageBox 准确地显示了我需要的字符串:完整的命令。另外,如果我手动执行命令,它可以工作:

C:\temp>xcopy /Y c:\temp\version.bat \\testsystem3\temp
C:\temp\version.bat
1 File(s) copied

我已经为此奋斗了2天。我想我在某处遗漏了一些引号,但无法弄清楚。

谢谢!

4

1 回答 1

3

您不会缺少引号,而是需要很多引号。您的函数在执行之前在命令周围放置了额外的双引号。这会导致整个命令字符串被解释为单个文件名(其中包含空格)。当您像这样运行命令时,您将获得完全相同的结果cmd

C:\temp>"xcopy /Y c:\temp\version.bat \\testsystem3\temp"
The filename, directory name, or volume label syntax is incorrect.

只需更改此行

objShell.Run AddQuotes(copythis)

进入这个

objShell.Run copythis

问题应该消失了。

如果要添加双引号,请像这样添加它们:

copythis = "xcopy.exe /Y " & AddQuotes("c:\temp\version.bat") & " " _
  & AddQuotes(testsystem & "\temp")
于 2013-04-03T18:51:42.793 回答