0

我正在尝试从 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,适用于 Win64 (x86) 版权所有 (c) 2000, 2010,Oracle 和/或其附属公司。版权所有。

Oracle 是 Oracle Corporation 和/或其附属公司的注册商标。其他名称可能是其各自所有者的商标。

用法:C:\Program Files\MySQL\MySQL Server 5.5\bin\mysql [OPTIONS] [database] -?, --help 显示此帮助并退出。-I, --help - 的同义词?--auto-rehash 启用自动重新散列。不需要使用“rehash”来完成表格和字段,但启动和重新连接可能需要更长的时间。使用 --disable-auto-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;'")

我在这里做错了什么吗?

4

1 回答 1

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;""")
于 2013-06-05T03:47:54.970 回答