上下文
我正在尝试编写一个脚本,该脚本将根据情况切换我的WLAN适配器(启用/禁用它)。如果适配器当前已启用,则脚本应禁用适配器;相反,如果当前禁用,则应启用适配器。到目前为止,这是我想出的:

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "%comspec% /C devcon status PCI\VEN_168C > C:\devstat.txt", 0, false
Return = WshShell.Run("findstr disabled C:\devstat.txt", 0, true)
WScript.Echo Return

If Return = 0 Then
        WshShell.Run "devcon " & "enable PCI\VEN_168C", 0, false
Else
        WshShell.Run "devcon " & "disable PCI\VEN_168C", 0, false
End If

脚本说明
第1行非常明显,因此我跳过了这一部分。 第2行执行devcon来检查我的WLAN适配器的状态(硬件ID PCI\VEN_168C)并将输出转储到C:\devstat.txt。 第3行运行findstr以检查C:\devstat.txt是否包含“disabled”。如果未找到“disabled”,则findstr应该返回errorlevel> 0,否则errorlevel == 0(零)。脚本的其余部分仅是基于值的语句返回(应该保留errorlevel的值)。

问题
的值无论C:\devstat.txt是否包含“disabled”,返回始终为1。

我在这里想念什么?

最终编辑
由于barlop的提示,我设法找到了解决方法。原来,罪魁祸首是Windows脚本宿主。执行第2行之后,脚本必须暂停几毫秒,因此最终脚本应如下所示:
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "%comspec% /C devcon status PCI\VEN_168C > C:\devstat.txt", 0, false
WScript.sleep 400
Return = WshShell.Run("findstr disabled C:\devstat.txt", 0, true)
Rem WScript.Echo Return

If Return = 0 Then
    WshShell.Run "devcon " & "enable PCI\VEN_168C", 0, false
Else
    WshShell.Run "devcon " & "disable PCI\VEN_168C", 0, false
End If

最佳答案

findstr没有问题。

运行此代码,该代码与您的代码相同,但在findstr行之前使用wscript.echo“WAIT”。现在,执行该wscript.echo“WAIT”行时,打开文件,您可能会看到它不包含禁用的文件,现在在其中写入禁用的文件并保存。然后单击确定以显示等待消息。并且程序继续。

我从findstr命令返回的错误级别中获得了正确的结果。那是
1表示不包含禁用
0表示何时执行

您也可以尝试进行故障排除,以使程序更易于发现错误。因此,您可以尝试删除该行,以测试findstr,然后您可能会发现findstr很好。查看findstr之前的文件并进行手动修改,也可以显示该文件,而不必删除该行。

我还尝试过将Return更改为Retur'cos,我认为Return可能是一个关键字,因此无法正常工作,但是与您使用的Return变量名称配合使用时效果很好。

所以问题是

WshShell.Run "%comspec% /C devcon status PCI\VEN_168C > C:\devstat.txt", 0, false

但是findstr很好。我认为您使用True作为第三个参数是正确的

WshShell.Run(“findstr xbc C:\getmail\a.a”,0,是)

自从script56.chm提供的文档“如果设置为true,脚本执行将暂停,直到程序完成为止,并且Run返回程序返回的任何错误代码。如果设置为false(默认值),则Run方法在启动程序后立即返回,则自动返回0(不会被解释为错误代码)。”
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "%comspec% /C devcon status PCI\VEN_168C > C:\devstat.txt",

0, false
wscript.echo "WAIT"
Return = WshShell.Run("findstr disabled C:\devstat.txt", 0, true)
WScript.Echo Return

If Return = 0 Then
        WshShell.Run "devcon " & "enable PCI\VEN_168C", 0, false
Else
        WshShell.Run "devcon " & "disable PCI\VEN_168C", 0, false
End If

关于windows - “findstr”总是在VBScript中返回失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6893411/

10-09 22:09