【问题标题】:How to force invoked command's STDOUT into invoking cmd.exe's STDOUT?如何强制调用命令的 STDOUT 调用 cmd.exe 的 STDOUT?
【发布时间】:2012-07-06 06:50:20
【问题描述】:

上下文:Oracle 企业管理器具有“执行主机命令”的功能。如果在该功能中输入“dir c:\temp”,则输出窗口会回显该命令,然后显示目录列表。如果进入该功能,我输入“powershell dir c:\temp”,输出窗口仅显示 echo'd 命令。没有目录列表。如果在目标机器上我在两种情况下都输入这两个命令,我会得到 echo'd 命令,后跟目录列表。

我假设我在客户端的 cmd.exe 窗口中看到的内容混合了两个标准输出流:一个来自 cmd.exe 本身,另一个来自调用的进程(powershell dir c:\temp)。 Oracle 的东西似乎只识别 cmd.exe 的标准输出。

有什么方法可以强制调用进程中的标准输出到 cmd.exe 的标准输出流中,以便 Oracle 能够识别它并且我正在尝试构建的东西可以工作?

【问题讨论】:

    标签: powershell windows-7 stdout powershell-2.0 cmd


    【解决方案1】:

    我认为您不能直接将一个程序的输出通过管道传输回父 cmd.exe 的 STDOUT - 假设这就是 Oracle 在某个级别上所做的事情。

    话虽如此,您可以尝试以下聪明的方法:

    cmd /c "powershell -Command ""& echo Hello" > %TEMP%\a.txt & TYPE %TEMP\a.txt
    

    基本上,这是从 PowerShell 捕获输出,将其放置在一个临时文件中,然后将该文件转储回 cmd.exe 中的 STDOUT。一个不错的方法是在命令末尾使用& DEL %TEMP%\a.txt 清理临时文件。

    您可能需要使用命令行来解决 Oracle 传递信息的任何怪癖 - 我的猜测是它直接调用 cmd.exe /c,因此您可能可以忽略这部分。

    【讨论】:

    • 原来我也需要 cmd.exe /c。我的旧批处理编程书(“包括 OS/2 的 MS-DOS 批处理文件编程”)中没有 & 符号。对于可能需要它的人,这里有一个稍微更新的参考:technet.microsoft.com/en-us/library/bb490954.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多