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

Windows 如何从命令提示符保存输出,windows,batch-file,Windows,Batch File,我知道在命令提示符下执行时将输出保存到文本文件的一般语法 但我的需要不同。我想在命令提示窗口中看到它,也想将它保存在文本文件中。通常使用>c:\dirlist.txt将保存为文本文件,但无法在命令提示窗口中查看 我需要看到在命令提示符以及保存在文本文件。任何帮助您想要的都是适用于Windows的tee程序。如果你能用,那么。否则,谷歌需要一个在你的系统上运行的实现 或者,您可以将输出重定向到一个文件,并使用live log viewer从另一个命令提示符(即相当于tail)观察该文件。首先,编写

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

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


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

您想要的都是适用于Windows的
tee
程序。如果你能用,那么。否则,谷歌需要一个在你的系统上运行的实现


或者,您可以将输出重定向到一个文件,并使用live log viewer从另一个命令提示符(即相当于
tail
)观察该文件。

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

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

tee CopyOfFile.txt < File.txt

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

您可以使用批处理编写自己的tee,就像Aacini的tee一样,但没有缺点

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

投票决定将问题转移给超级用户,因为它更适合那个网站。我在。set/p不等待管道中的数据,set/p不能仅用
读取数据,但管道会删除
我的最后一句话是胡说八道。管道缓冲区包含
CR/LF
对,
set/p
始终读取完整的(管道)缓冲区,但在第一个
CR/LF
后删除所有缓冲区,因此您可能会丢失作为子例程或独立批处理文件使用的行,并使用命令调用它以qouted形式输出。根据命令中的引号,可能需要先将命令分配给变量,然后在调用中传递变量。
@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
)
@Echo off & CD "%~dp0"
For /F "UsebackQ Tokens=* Delims=" %%A in (`"%~1"`) do (
    >>Outputfile.txt Echo(%%A
    Echo(%%A
)
Goto :EOF