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

问题描述 投票:2回答:2

如何将批处理文件的输出保存到文本文件中,输出也应显示在控制台上。

对于Eg:

@ECHO OFF
ECHO Hello World 
@pause

它将在控制台上显示Hello World

@ECHO OFF
ECHO Hello World >text.txt
@pause

它会将Hello World保存到text.txt

我怎么能让它们一起发生?

提前致谢

batch-file logging console output
2个回答
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]


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. 如果您不想追加,请使用>而不是>>
© www.soinside.com 2019 - 2024. All rights reserved.