我正在尝试从mysql获取“进程列表”并将其输出到文件中以进行日志记录。这是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 Ver 14.14 Distrib 5.5.15,for Win64(x86) 版权所有(c)2000,2010,Oracle和/或其附属公司。保留所有权利。
Oracle是Oracle Corporation和/或其注册商标 分支机构。其他名称可能是其各自的商标 所有者。
用法:C:\ Program Files \ MySQL \ MySQL Server 5.5 \ bin \ mysql [OPTIONS] [数据库] - ?, - help显示此帮助并退出。 -I, - help同义词 - ? --auto-rehash启用自动重新散列。一个不需要使用 'rehash'得到表和字段完成,但启动 并重新连接可能需要更长的时间。禁用 - 禁用自动翻版。 (默认为on;使用--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;'")
我在这里做错了吗?
答案 0 :(得分: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;""")