Windows .cmd标准输出 - 多重定向

时间:2014-10-24 19:50:22

标签: batch-file command-prompt io-redirection

给出一个Windows .cmd文件 abc.cmd

abc.cmd > output.log

上面的命令行操作会将执行的输出保存到output.log文件。

是否有运行此命令的选项,以便创建此日志的多个副本。也就是说,我希望在一个位置创建一个副本,在另一个位置创建另一个副本。

请不要让我运行复制命令。我正在寻找命令行"选项"。

4 个答案:

答案 0 :(得分:3)

unix tee命令的任何Windows实现都可以完美地运行。那里有免费的选择。我喜欢使用GNU utilities for Windows,其中包括tee.exe。

用法很简单:

abc.cmd | tee out1.txt >out2.txt

或者,您可以使用Windows Scripting Host(WSH)编写自己的tee实现 - 无需下载exe! triggeradeadcat attempted to do so,但该实现存在缺陷,因为它使用基于行的输入/输出而不是基于字符的输入/输出。如果命令在同一行上有交互式提示和响应,它将无法正常工作。

下面是我在许多项目中使用的一个方便的JScript实现。我使用混合JScript /批处理技术,因此可以直接调用该实用程序,而无需指定CSCRIPT。

@if (@X)==(@Y) @end /* Harmless hybrid line that begins a JScript comment

::--- Batch section within JScript comment that calls the internal JScript ----
@echo off
cscript //E:JScript //nologo "%~f0" %*
exit /b

----- End of JScript comment, beginning of normal JScript  ------------------*/
var fso = new ActiveXObject("Scripting.FileSystemObject");
var mode=2;
if (WScript.Arguments.Count()==2) {mode=8;}
var out = fso.OpenTextFile(WScript.Arguments(0),mode,true);
var chr;
while( !WScript.StdIn.AtEndOfStream ) {
  chr=WScript.StdIn.Read(1);
  WScript.StdOut.Write(chr);
  out.Write(chr);
}

同样,用法很简单:

abc.cmd | tee out1.txt >out2.txt

答案 1 :(得分:2)

没有这样的命令行选项存在已被其他人评论,但您可以多次运行该命令将它们重定向到不同的文件,如下所示

date > D:\Testing\test.log & date > D:\Testing\test1.log

所以在你的情况下就像

abc.cmd > output.log & abc.cmd > output1.log

答案 2 :(得分:0)

从您发布的网站:

命令> fileS> file - 将输出重定向到单独的文件。

这不是你想要的吗?

答案 3 :(得分:0)

Set Inp = WScript.Stdin
Set Outp = Wscript.Stdout
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.CreateTextFile(wscript.Arguments(0), vbtrue)
        Do Until Inp.AtEndOfStream
            Line=Inp.readline
            outp.writeline Line
            file.writeline Line
        Loop

Haven未经过测试。

dir |cscript tee.vbs filename1.txt > filename2.txt