【问题标题】:How to display the output text in the Windows command line while redirecting the output text in a file?重定向文件中的输出文本时如何在 Windows 命令行中显示输出文本?
【发布时间】:2011-09-08 00:25:28
【问题描述】:

目前我有一个 make 文件,它将使用 gnumake 构建我的软件,目前我将我的输出文本(如构建日志、警告、错误)重定向到一个文件中。但是现在我认为在构建和重定向文件中的输出文本时也显示所有输出文本非常有帮助。以下是我当前的命令,

gnumake -f Build.mak  1>Logs.txt 2>>&1

是否可以在重定向文件中的输出文本时显示输出文本?

【问题讨论】:

标签: windows cmd tee


【解决方案1】:

我知道这是一篇旧帖子,但从未正确回答。 这是其他未来观众的一个答案。 您不需要tee 就能记录文件并显示文本。还有另一种方法。

此问题已在 StackOverflow 上得到解答。这是两个链接:

如果您不想使用tee,请检查:When adding a TextLog to Echo in Command Line, Input wont show up

对于tee,您可以看到:Displaying Windows command prompt output and redirecting it to a file

只是在这里抛出答案。

你可以在不使用 tee 的情况下使用它。

set LogFile=path\logfile.txt
set TempLog=path\temp
set logg=^> %TempLog%^&^& type %TempLog%^&^&type %TempLog%^>^>%LogFile%

如果您需要创建目录或/和 logfile.txt,请执行此操作。

if not exist "path" mkdir "path" >>nul
echo. 2>  %LogFile%  >nul
echo. 2>  %TempLog%  >nul

现在只需像这样使用echo

echo This will show me a text and logg  %logg%

【讨论】:

    【解决方案2】:

    如果你安装了 cygwin(ms windows 上的 unix 工具),你可以使用“tee”命令: gnumake -f Build.mak | tee Logs.txt

    (这会将输出保存到 Logs.txt 并同时将输出显示到控制台)。

    【讨论】:

      【解决方案3】:

      看看这个 SOq:

      基本上,您可以使用tee 命令,例如从这里开始:

      【讨论】:

        【解决方案4】:

        增强版Avrumi Sherman 处理STDERR STDOUT

        D:\>dir ERROR 1>log.txt 2>&1 & type log.txt
         Datenträger in Laufwerk D: ist DATA
         Volumeseriennummer: 4653-A096
        
         Verzeichnis von D:\Projekte\UDG_TMP\build-deploy
        
         Datei nicht gefunden
        

        所以它会在屏幕上显示STDTOUT(第一行)STDERR(最后一行)日志文件。

        要在批处理文件中使用,只需像 Avrumi Sherman 那样做,但使用 single & 来捕获 ERROR 情况:

        D:\>set logFile=log.txt
        D:\>set tmpLog=tmp.txt
        D:\>set logCmd=1^>%tmpLog% 2^>^&1 ^& type %tmpLog% ^& type %tmpLog%^>^>%logFile%
        

        现在您可以像 logCmd 一样使用 logCmd 变量;)

        注意第一个dir 和第二个rmdir 的错误消息显示在屏幕上以及出现在日志文件中:

        D:\>echo START %logCmd%
        START
        
        D:\>dir DIRECTORY %logCmd%
         Datenträger in Laufwerk D: ist DATA
         Volumeseriennummer: 4653-A096
        
         Verzeichnis von D:\
        
        Datei nicht gefunden
        
        D:\>mkdir DIRECTORY %logCmd%
        
        D:\>dir DIRECTORY %logCmd%
         Datenträger in Laufwerk D: ist DATA
         Volumeseriennummer: 4653-A096
        
         Verzeichnis von D:\DIRECTORY
        
        26.08.2020  17:50    <DIR>          .
        26.08.2020  17:50    <DIR>          ..
                       0 Datei(en),              0 Bytes
                       2 Verzeichnis(se), 68.391.989.248 Bytes frei
        
        D:\>rmdir DIRECTORY %logCmd%
        
        D:\>rmdir DIRECTORY %logCmd%
        Das System kann die angegebene Datei nicht finden.
        
        D:\>echo STOP %logCmd%
        STOP
        

        在批处理文件的末尾,您可以/应该删除%tmpLog%。这里%logFile%的内容使用上面的例子:

        START
         Datenträger in Laufwerk D: ist DATA
         Volumeseriennummer: 4653-A096
        
         Verzeichnis von D:\
        
        Datei nicht gefunden
         Datenträger in Laufwerk D: ist DATA
         Volumeseriennummer: 4653-A096
        
         Verzeichnis von D:\DIRECTORY
        
        26.08.2020  17:50    <DIR>          .
        26.08.2020  17:50    <DIR>          ..
                       0 Datei(en),              0 Bytes
                       2 Verzeichnis(se), 68.391.989.248 Bytes frei
        Das System kann die angegebene Datei nicht finden.
        STOP
        

        【讨论】:

          猜你喜欢
          • 2012-12-25
          • 2013-11-15
          • 2022-01-24
          • 1970-01-01
          • 1970-01-01
          • 2011-07-10
          • 1970-01-01
          • 2010-10-22
          • 2015-06-27
          相关资源
          最近更新 更多