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

时间:2016-01-05 17:02:38

标签: 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

我怎样才能让它们一起发生?

提前致谢

2 个答案:

答案 0 :(得分:0)

如果需要,请使用'FOR'命令:(这是一个只执行1命令)

For /f "tokens=*" %%a in ('ECHO Hello world') do (
  echo %%a
  echo %%a >text.txt
)

但是下面的解决方案只有在你想要将两个输出都发送到控制台并提交一个显示许多文本的命令时才有用,例如'SET'命令。

那么你创建一个外部批处理文件然后在你的主文件中使用它呢? 示例:'printBoth.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
)

现在,如果您要打印到控制台和文件,只需输入以下代码:call printBoth.bat [type command in here]

答案 1 :(得分:0)

如果要获取命令的输出:

if exist "file.txt" del file.txt /f /q
for /f "delims=" %%k in ('command here') do (
  echo %%k
  echo %%k>>file.txt
)
  1. 注意>>。不要使用>>将删除文件中的所有文本,然后在命令中写入输出的第一行,如果FOR将有多行被“回显”,那将是不好的。 >>创建新行,而不是替换>之类的行。
  2. DELIMS=的工作方式类似于TOKENS=*,但DELIMS=将不包含执行的命令。

我添加了if exist "file.txt" del file.txt /f /q,以便不附加新的输出行。如果要将行添加到文件中,可以删除该行。

对于自定义的ECHO输出,

@echo off
echo TEXTHERE & echo TEXTHERE >>file.txt
echo TEXTHERE2 & echo TEXTHERE >>file.txt
rem ...and so on
  1. <command1> & <command2>的意思是“先做<command1>,再再做 <command2>
  2. 如果您不想追加,请使用>代替>>