1

我正在寻找一个脚本,我将在其中接受用户的输入,将其作为参数传递给命令行并显示结果。

就像是:

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")
4

2 回答 2

3

除了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, " ")

此外,通常schtasksC:\.

于 2013-07-16T09:21:30.537 回答
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

由复制粘贴地精添加)

(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

使用文档来学习如何改进我的演示片段——生产就绪版本应该做一些错误处理。

如果您不想使用.Exec,请参阅此答案以获取使用.Run和重定向来获取命令输出的示例代码。

于 2013-07-16T07:48:29.367 回答