HTA (VBScript) - Shell.Run 使用变量
Posted
技术标签:
【中文标题】HTA (VBScript) - Shell.Run 使用变量【英文标题】:HTA (VBScript) - Shell.Run using variables 【发布时间】:2013-04-03 15:50:53 【问题描述】:我正在尝试创建一个将文件复制到另一个系统的小程序。系统名称是先前选择的(是一个变量 = “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 天。我想我在某处遗漏了一些引号,但无法弄清楚。
谢谢!
【问题讨论】:
【参考方案1】:您不会缺少引号,而是需要很多引号。您的函数在执行之前在命令周围放置了额外的双引号。这会导致整个命令字符串被解释为单个文件名(其中包含空格)。当您像这样在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")
【讨论】:
谢谢!出于某种原因,我认为 objShell.Run 语句中的命令必须一直用引号引起来。我什至没想过要删除它们。以上是关于HTA (VBScript) - Shell.Run 使用变量的主要内容,如果未能解决你的问题,请参考以下文章
HTA (VBScript) - Shell.Run 使用变量