如何从命令提示符保存输出

时间:2011-12-05 17:55:16

标签: windows batch-file

我知道在命令提示符下执行时将输出保存到文本文件的一般语法。

但我的需求与众不同。我想在命令提示符窗口中看到它,我也想将它保存在文本文件中。通常使用> c:\ dirlist.txt将保存到文本文件,但无法在命令提示符窗口中看到。

我需要在命令提示符下看到并保存在文本文件中。任何帮助

4 个答案:

答案 0 :(得分:2)

首先,编写TEE.BAT程序相对容易。唯一的问题是set /p命令(用于从命令获取输出)不区分文件末尾和空行。这意味着将捕获输出直到第一个空行(或文件末尾):

@echo off
:: usage: AnyCommand | TEE filename
setlocal EnableDelayedExpansion
if exist %1 del %1
:nextLine
set line=:EOF
set /p line=
if "!line!" == ":EOF" goto :eof
echo(!line!
echo(!line!>> %1
goto nextLine

您可以测试此批处理文件确实以这种方式工作:

tee CopyOfFile.txt < File.txt

然而,当此Batch文件按其设计方式使用时,它会偶尔失败:

type File.txt | tee CopyOfFile.txt

上一行有时可以正常工作,有时只显示和存储文件的第一行。我做了几次测试,无法找出错误的原因。也许有人(杰布?)可以解释在这种情况下发生的事情并给出解决方案。

答案 1 :(得分:1)

您想要相当于Windows的tee程序。如果您可以使用PowerShell,那么you already have what you need。否则,请使用Google进行适用于您系统的实施。

或者,您可以将输出重定向到文件,并使用另一个命令提示符(即相当于tail)的实时日志查看器观察该文件。

答案 2 :(得分:0)

你可以像Aacini那样用批量编写自己的T恤,但没有缺点。

@ECHO OFF
setlocal DisableDelayedExpansion
for /F "delims=" %%A in ('findstr /n "^" ') do (
  set "line=%%A"
  setlocal EnableDelayedExpansion
  set "line=!line:*:=!"
  (echo(!line!)
  (echo(!line!) > "%~1"
  endlocal
)

最初的想法是来自walid2me echo to screen and file in a single line

答案 3 :(得分:0)

以下是显示和记录命令输出的另一种方法:

@Echo off & CD "%~dp0"
For /F "UsebackQ Tokens=* Delims=" %%A in (`"%~1"`) do (
    >>Outputfile.txt Echo(%%A
    Echo(%%A
)
Goto :EOF