上下文
我正在尝试编写一个脚本,该脚本将根据情况切换我的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/