【问题标题】:Redirect output of shell commands to file将 shell 命令的输出重定向到文件
【发布时间】:2013-07-18 07:29:33
【问题描述】:

我正在从命令提示符运行以下命令

dir > c:\log.txt 2>&1

out 成功定向到c:\log.txt 文件。 然后,使用 CreateProcessA 运行相同的命令,如下所示,没有任何反应

Public Function ExecCmd(cmdline$)
Dim proc As PROCESS_INFORMATION
Dim start As STARTUPINFO
Dim ret As Long

start.cb = Len(start)
start.dwFlags = 1
start.wShowWindow = 1
ret& = CreateProcessA(vbNullString, cmdline$, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, vbNullString, start, proc)
ret = WaitForSingleObject(proc.hProcess, INFINITE)
Call GetExitCodeProcess(proc.hProcess, ret&)
Call CloseHandle(proc.hThread)
Call CloseHandle(proc.hProcess)
ExecCmd = ret&
End Function

这里cmdline$被传递为dir > c:\log.txt 2>&1

我试过Batch file - How to redirect output from exe after it has terminated?和Display & Redirect Output

请指出这里有什么问题

【问题讨论】:

    标签: shell winapi command-line vb6 cmd


    【解决方案1】:

    为什么不用shell函数呢?以下是如何重定向输出的示例:

    Option Explicit
    
    Private Sub Form_Load()
        ExecCmd "dir >c:\log.txt 2>&1"
    End Sub
    
    Private Sub ExecCmd(cmdline As String)
        Shell "cmd /c " & cmdline, vbHide
    End Sub
    

    【讨论】:

    • 是的,它工作了,但是如何等待命令完成?
    • 它也可以通过在命令前添加“cmd /c”与 API 一起使用
    • 当然可以。这与Shell()无关,是关于命令行shell(cmd.exe)中的命令行语法。
    猜你喜欢
    • 1970-01-01
    • 2018-06-07
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2018-12-09
    • 2016-09-09
    相关资源
    最近更新 更多