使用msbuild中的Exec任务抑制输出

时间:2010-12-07 18:47:35

标签: msbuild

我正在使用msbuild“Exec”任务运行命令。但是我不希望命令生成的stdio输出出现在控制台中,无论如何都要压制它吗?

也许使用Exec任务用我的命令exe调用“cmd.exe”是一个目标,然后使用“>”将输出重定向到其他地方。 (但是我无法让这个解决方案起作用)。

<Exec Command="cmd.exe sqlplus.exe  $(someCommandSpecificSettings) &lt; test.txt"/>

有什么建议让我的榜样上班或替代?

4 个答案:

答案 0 :(得分:8)

仅供参考:

  •   

    &gt;)将输出重定向到您指定的文件(如果需要,则覆盖)

  •   
        

    将输出附加到您之后指定的文件(未覆盖)

      
  • &LT;将标准INPUT重定向到您的命令(基本上将文件的内容传递给您的命令)

使用您的代码,您可以创建(一次)并在每次test.txt文件时替换。您可以使用NUL而不是使用文件名,这意味着重定向到无处。这不会创建文件(在某些情况下可能会很大):

<Exec Command="cmd.exe /c sqlplus.exe  $(someCommandSpecificSettings) &gt; NUL"/>

如果您想重定向错误,请使用2&gt;喜欢:

<Exec Command="cmd.exe /c sqlplus.exe  $(someCommandSpecificSettings) &gt; NUL 2&gt;errors.txt"/>

另请注意,您可以使用2&gt;&amp; 1将stderr重定向到stdout,因此

> NUL 2>&1

会将所有内容重定向到无处。

希望这能澄清你的想法^^

答案 1 :(得分:3)

Exec任务或任何继承自ToolTask的任务中抑制标准输出和标准错误输出的最佳方法是降低输出的重要性。这样,如果您正在调试构建,这些输出将不会被完全隐藏,因为您将它们重定向到nul。

<Exec Command="sqlplus.exe" StandardOutputImportance="low" StandardErrorImportance="low"/>

答案 2 :(得分:1)

好的,想通了...... cmd.exe需要a / c参数才能满足我的要求,即:

此外,它应该是&gt;而不是&lt;

<Exec Command="cmd.exe /c sqlplus.exe  $(someCommandSpecificSettings) &gt; test.txt"/>

答案 3 :(得分:0)

试试这个:

<Exec Command="cmd.exe sqlplus.exe  $(someCommandSpecificSettings) &lt; test.txt >nul"/>