如何捕获由另一个cmd窗口生成的cmd窗口的输出?

时间:2014-05-16 16:32:20

标签: windows batch-file powershell cmd

第一个cmd窗口:http://i.stack.imgur.com/dihjW.png

hg.exe(Mercurial)必须是"以管理员身份运行" (与pageant.exe通信的怪癖 - 排除了版本和防火墙问题),从而为自己产生了一个新的cmd窗口。

第二个cmd窗口:http://i.stack.imgur.com/MEAX6.png

但是对于定时很好的截图,似乎没有办法捕获第二个cmd窗口的详细输出,因为它是瞬态的,并在hg.exe终止后立即关闭。

我已经尝试过以下方法:

  1. 管道到clip

    hg push ssh://hg@bitbucket.org/slaiyer/hellwrld | clip

  2. 重定向到文件:

    hg push ssh://hg@bitbucket.org/slaiyer/hellwrld > D:\log.txt

  3. cmd /k开关:

    cmd /k "hg push ssh://hg@bitbucket.org/slaiyer/hellwrld"

  4. 毋庸置疑,所有的努力都是徒劳的。

    有没有办法实现这一目标? 我对包含批处理文件和PowerShell的解决方法持开放态度,但首选本机命令行解决方案。 感谢。

2 个答案:

答案 0 :(得分:1)

首先尝试:它将STDERR重定向到文件,因为有些工具会在那里写消息。

hg push ssh://hg@bitbucket.org/slaiyer/hellwrld > D:\log.txt 2>&1

答案 1 :(得分:1)

问题在于,您无法在单个操作中提升和重定向输出。

通常的解决方案是提升整个脚本,这也有一个优点,即用户只需要确认一次提升而不是每次调用提升命令。通常没有通常任何理由不这样做。

但是,另一种方法是创建一个目标为cmd.exe /c的快捷方式,以及"以管理员身份运行"选项集。假设我们将其命名为elevation.lnk,您可以像这样启动它:

start /wait elevation.lnk "hg push ssh://hg@bitbucket.org/slaiyer/hellwrld | clip"

这种方法不会保留当前目录;如果有必要,请使用

start /wait elevation.lnk "cd /d %cd% && hg push ssh://hg@bitbucket.org/slaiyer/hellwrld | clip"