VBScript:使用参数重定向命令行的输出

时间:2013-06-05 03:11:24

标签: vbscript

我正在尝试从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;'")

我在这里做错了吗?

1 个答案:

答案 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;""")