Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件输出到控制台和文本_Batch File_Logging_Console_Output - Fatal编程技术网

Batch file 批处理文件输出到控制台和文本

Batch file 批处理文件输出到控制台和文本,batch-file,logging,console,output,Batch File,Logging,Console,Output,如何将批处理文件的输出保存为文本文件,并在控制台上显示输出 例如: @ECHO OFF ECHO Hello World @pause 它将在控制台上显示Hello World @ECHO OFF ECHO Hello World >text.txt @pause 它将把Hello World保存到text.txt 我怎样才能让这两件事同时发生 提前感谢如果需要,请使用“FOR”命令:(是的,此命令仅执行1个命令) 但下面的解决方案仅在您希望将输出发送到控制台并将显示大量文本(如“S

如何将批处理文件的输出保存为文本文件,并在控制台上显示输出

例如:

@ECHO OFF
ECHO Hello World 
@pause
它将在控制台上显示Hello World

@ECHO OFF
ECHO Hello World >text.txt
@pause
它将把Hello World保存到text.txt

我怎样才能让这两件事同时发生


提前感谢

如果需要,请使用“FOR”命令:(是的,此命令仅执行1个命令)

但下面的解决方案仅在您希望将输出发送到控制台并将显示大量文本(如“SET”命令)的命令归档时有用。

那么,创建一个外部批处理文件,然后在主文件中使用它怎么样?
示例:“printweat.bat”的代码

@echo off
setlocal ENABLEDELAYEDEXPANSION
set string=
:loop
set string=!string!%1
shift
if not "%1"=="" goto loop

For /f "tokens=*" %%a in ('!string!') do (
  echo %%a
  echo %%a >text.txt
)

现在,如果要同时打印到控制台和文件,只需键入以下代码:
调用printweath.bat[在此处键入命令]


如果要获得命令的输出:

if exist "file.txt" del file.txt /f /q
for /f "delims=" %%k in ('command here') do (
  echo %%k
  echo %%k>>file.txt
)
  • 请注意
    >
    。不要使用
    将删除文件中的所有文本,然后在命令中写入第一个输出ed行,如果有多行将由
    进行“echo-ed”,这是不好的
    >
    创建一个新行,而不是像
    那样替换该行
  • DELIMS=
    的工作原理类似于
    TOKENS=*
    ,但
    DELIMS=
    不包括已执行的命令
  • 我添加了
    如果存在“file.txt”del file.txt/f/q
    ,以便不附加新的输出ed行。如果要将这些行附加到文件中,可以删除这些行

    对于定制的
    ECHO
    输出

    @echo off
    echo TEXTHERE & echo TEXTHERE >>file.txt
    echo TEXTHERE2 & echo TEXTHERE >>file.txt
    rem ...and so on
    
  • &
    表示“执行
    然后执行
  • 如果不想追加,请使用
    而不是
    >

  • 控制台应用程序中的和.Am的副本。如果我的理解有误,请原谅。我检查了上面的链接。通过使用链接,我可以将所有日志指向同一个文件。但在执行此操作时,控制台上不会显示任何消息。我需要的是控制台应该显示消息,同时控制台上出现的消息应该登录到一个文件中。@user3647205您应该非常仔细地阅读现有问题的所有内容。解释为不可能只使用Windows命令处理器将文本输出到控制台窗口,同时重定向到文件。但是jeb在他对为这个任务编写的JScript/Batch hybrid tee的回答下面也发表了评论。再次在此发布此解决方案的链接。其他答案也包含各种tee解决方案。不符合我的要求。它将控制台stdout和/或stderr定向到日志文件。但只有在控制台中记录或监视才会发生。引导以满足这两种情况。但当我尝试时,它并不一致。有时它会记录并显示消息。但有时并非针对同一个命令。我不知道发生了什么。我的确切目标是从vba excel运行一个批处理文件,等待它完成执行,并检查错误日志,查看执行是否成功,然后再继续。我还想看到控制台消息。任何建议都会有帮助。我正在使用Wscript从vba运行bat文件。
    “tokens=*”
    删除前导空格。因此,我将使用
    “delims=“
    ”。(使用类似于
    dir
    的命令来观察差异)请参阅,以了解其他一些方法。现在我将使用
    delims=
    ,因为如果我使用
    tokens=*
    ,将包括
    dir
    命令。
    @echo off
    echo TEXTHERE & echo TEXTHERE >>file.txt
    echo TEXTHERE2 & echo TEXTHERE >>file.txt
    rem ...and so on