在vbscript中传递命令行参数

时间:2013-07-16 07:14:25

标签: vbscript

我希望创建一个脚本,我将接受用户的输入,将其作为参数传递给命令行并显示结果。

类似的东西:

Dim WshShell, Return,sctask,arg

arg=inputbox("Enter the computername")
Set arg = Wscript.Arguments
Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run("C:\schtasks /query /s &arg")

2 个答案:

答案 0 :(得分:2)

除了Ekkehard.Horner所说的内容之外:你不能像简单字符串一样追加集合(WScript.Arguments):

Set arg = Wscript.Arguments
...
WshShell.Run "C:\schtasks /query /s " & arg

您需要重新构建参数字符串,如下所示:

ReDim args(WScript.Arguments.Count-1)
For i = 0 To WScript.Arguments.Count-1
  If InStr(WScript.Arguments(i), " ") > 0 Then
    args(i) = Chr(34) & WScript.Arguments(i) & Chr(34)
  Else
    args(i) = WScript.Arguments(i)
  End If
Next

WshShell.Run "C:\schtasks /query /s " & Join(args, " ")

此外,schtasks中通常没有C:\个可执行文件。

答案 1 :(得分:1)

回复:

WshShell.Run("C:\schtasks /query /s &arg")

(1)VBScript不插入变量,你必须连接arg(正确)的内容:

WshShell.Run "C:\schtasks /query /s " & arg

(WRT @ Ansgar的帖子:我认为arg拥有计算机名称(希望)由

获取
arg=inputbox("Enter the computername")

你的下一行:

Set arg = Wscript.Arguments

由copy-& -paste-goblin添加

(2)调用sub /不接收返回值时,不得使用param list()。所以要么使用上面的行,要么

iRet = WshShell.Run("C:\schtasks /query /s " & arg)

Re:显示结果

由于.Run只执行命令并返回状态,获得schtasks输出的最低成本/最高增益方法为.Exec

Option Explicit

Dim oWSH : Set oWSH = CreateObject("WScript.Shell")
Dim sCmd : sCmd     = "schtasks /Query /S winxpsp3"
Dim sRes : sRes     = oWSH.Exec(sCmd).Stdout.ReadAll()
WScript.Echo sRes

使用docs了解如何改进我的演示代码段 - 生产就绪版本应该进行一些错误处理。

如果您不想使用.Exec,请参阅this answer了解使用.Run的示例代码并重新定向以获取命令的输出。