管道脚本vbs

时间:2016-04-10 14:58:30

标签: vbscript

我创建了以下脚本,但它只返回0,甚至在DNS测试中发现错误。

Dim consult, objShell

Set objShell = WScript.CreateObject ("WScript.shell")

consult = objShell.run ("dcdiag /test:DNS | findstr /i failed", 0)

If consult = "0" THEN
    WScript.Echo "OK"
else
    WScript.Echo "ERROR"
end If

我知道没有运行findstr。

感谢关注。

1 个答案:

答案 0 :(得分:0)

  • 您不使用“Option Explicit”;那是鲁莽的。
  • 你不要在你的Dims附近/紧接着你;这很容易出错。
  • 您只使用一次变量(objShell);这太浪费了。
  • 您在比较中混合数据类型(整数与字符串);那是愚蠢的。
  • 您没有阅读文档(仔细阅读);这是无礼的。

来自Docs

bWaitOnReturn

  

可选。布尔值,指示脚本是否应该等待   程序在继续下一个之前完成执行   脚本中的语句。如果设置为true,则脚本执行将停止,直到   程序完成,Run返回由...返回的任何错误代码   程序。如果设置为false(默认值),则返回Run方法   启动程序后立即自动返回0(不是   被解释为错误代码)。

为了避免因缺少dcdiag或不同版本的findstr或误解/使用这些程序而导致的不必要的问题,我使用“minimal errorlevel setters”:

type ex0.vbs, ex1.vbs

ex0.vbs
WScript.Quit 0

ex1.vbs
WScript.Quit 1

和这段代码:

Option Explicit

Dim consult : consult = WScript.CreateObject("WScript.Shell").Run("%comspec% /c ex0.vbs | ex1.vbs", 0, True)

If consult = "0" THEN
    WScript.Echo consult, "OK"
else
    WScript.Echo consult, "ERROR"
end If

输出:

cscript 36531325.vbs
1 ERROR

使用

.Run("ex0.vbs | ex1.vbs", 0, True)

看到你需要一个shell(%comspec%)来使用shell的功能(|)和

.Run("%comspec% /c ex0.vbs | ex1.vbs", 0)

了解bWaitOnReturn参数的重要性。