2013-06-05 67 views
0

我想從mysql獲取「進程列表」,並將其輸出到文件中以進行日誌記錄。這裏是VBScript代碼:VBScript:使用參數重定向命令行輸出

Const ForReading = 1, ForWriting = 2, ForAppending = 8 
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 
Dim fso, ts, fileObj, TextLine 

Set fso = CreateObject("Scripting.FileSystemObject") 
FileName = "mysqlprocess.log" 

If Not(fso.FileExists(FileName)) Then 
    'File does not exist' 
fso.CreateTextFile FileName 
End If 

'Obtain a file object for the file' 
    Set fileObj = fso.GetFile(FileName) 

' Open a text stream for output. 
Set ts = fileObj.OpenAsTextStream(ForAppending, TristateUseDefault) 

' Write to the text stream. 
ts.WriteLine Date & " - " & Time 
ts.WriteLine 

Set objShell = WScript.CreateObject("WScript.Shell") 
'comspec = objShell.ExpandEnvironmentStrings("%comspec%")' 

Set objExec = objShell.Exec("C:\Program Files\MySQL\MySQL Server 5.5\bin\mysql -u root -ppassword mydatabase -t -e 'show processlist;'") 
Do 
    line = objExec.StdOut.ReadLine() 
    strOutput = strOutput & line & vbcrlf 
Loop While Not objExec.Stdout.atEndOfStream 

ts.WriteLine strOutput 

ts.WriteLine "==============================================" 
ts.Close 

,這裏是什麼寫入mysqlprocesslist.log文件:

2013年5月6日 - 下午1時08分58秒

C:\ PROGRAM Files \ MySQL \ MySQL Server 5.5 \ bin \ mysql版本14.14 Distrib 5.5.15,用於Win64(x86) 版權所有(c)2000,2010,Oracle和/或其附屬公司。版權所有。

Oracle是Oracle Corporation和/或其子公司 子公司的註冊商標。其他名稱可能是其各自的 所有者的商標。用法:C:\ Program Files \ MySQL \ MySQL Server 5.5 \ bin \ mysql [選項] [數據庫] - ?,--help顯示此幫助並退出。 -I,--help同義詞 - ? --auto-rehash啓用自動重新哈希。一個不需要使用 'rehash'來獲得表格和字段的完成,但啓動 並重新連接可能需要較長的時間。通過 禁用 - 禁用自動重新刷新。 (默認爲開;使用--skip-auto-rehash禁用。) -A,--no-auto-rehash 不自動重新哈希。必須使用'rehash'來獲得 表格和現場完成。這樣可以更快地啓動 mysql並在重新連接時禁用重新哈希。 [.............]

所以這就好像它沒有讀出參數一樣。我試圖改變Exec的線,其中包括空間,但這並沒有工作,要麼:

Set objExec = objShell.Exec("C:\Program Files\MySQL\MySQL Server 5.5\bin\mysql" & " -u root -ppassword mydatabase -t -e 'show processlist;'") 

這有什麼,我做錯了什麼?

回答

1

我是正確的,問題是用單引號語法:

Set objExec = objShell.Exec("C:\Program Files\MySQL\MySQL Server 5.5\bin\mysql -u root -ppassword mydatabase -t -e 'show processlist;'") 

正確的是:

Set objExec = objShell.Exec("C:\Program Files\MySQL\MySQL Server 5.5\bin\mysql -u root -ppassword mydatabase -t -e ""show processlist;""")