上下文
我想寫一個腳本,根據條件切換我的WLAN適配器(啓用/禁用它)。如果當前啓用了該腳本,則該腳本應禁用該適配器,或者相反,如果當前禁用該腳本,則該腳本將啓用它這是我想出迄今:「findstr」在VBScript中總是返回失敗
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包含「已禁用」。如果「已禁用」未找到,findstr應返回errorlevel> 0,否則errorlevel == 0(零)。該腳本的其餘部分只是基於返回(它應該保存errorlevel的值)的值。
問題
返回的值始終爲1是否C:\ devstat.txt含 「禁用」 與否。
我在這裏錯過了什麼?
最後編輯
由於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
也許[直接閱讀文本文件](http://technet.microsoft.com/en-us/library/ee198716.aspx)而不是調用'findstr'?不回答這個問題,但通常是這樣做的「更好的方式」。 – grawity
@grawity:我不知道如何使用FileSystemObject在文本文件中查找字符串。文檔似乎沒有給出有關這方面的例子。並感謝編輯我的問題;標題現在更好地反映了這個問題。 – 2011-07-23 15:35:36