Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file Windows.cmd标准输出-多个重定向_Batch File_Command Prompt_Io Redirection - Fatal编程技术网

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

Batch file Windows.cmd标准输出-多个重定向,batch-file,command-prompt,io-redirection,Batch File,Command Prompt,Io Redirection,给定一个windows.cmd文件abc.cmd 上面的命令行操作将把执行的输出保存到output.log文件中 是否有运行此命令的选项,以便创建此日志的多个副本。也就是说,我希望在一个位置创建一个副本,在另一个位置创建另一个副本 请不要要求my运行复制命令。我正在从您发布的网站上查找命令行“选项”: 命令>文件A>文件B-将输出重定向到单独的文件 这不是您想要的吗?不,没有其他人已经评论过的命令行选项,但是您可以多次运行该命令,将它们重定向到不同的文件,如下所示 date > D:\Te

给定一个windows.cmd文件abc.cmd

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

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


请不要要求my运行复制命令。我正在从您发布的网站上查找命令行“选项”:

命令>文件A>文件B-将输出重定向到单独的文件


这不是您想要的吗?

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

date > D:\Testing\test.log & date > D:\Testing\test1.log
所以在你的情况下

abc.cmd > output.log & abc.cmd > output1.log
我还没有测试过

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

unix tee命令的任何Windows实现都可以完美地工作。有免费的选择。我喜欢使用,其中包括tee.exe

用法很简单:

abc.cmd | tee out1.txt >out2.txt
abc.cmd | tee out1.txt >out2.txt
或者,您可以使用Windows脚本主机(WSH)编写自己的tee实现—无需下载exe,但这种实现是有缺陷的,因为它使用基于行的输入/输出,而不是基于字符的输入/输出。如果命令在同一行上有交互式提示和响应,则该命令将无法正常工作

下面是我在许多项目中使用过的一个方便的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
abc.cmd | tee out1.txt >out2.txt

copy output.log\path\to\new\location\copy1.log
是一个重定向操作符,不是命令,并且没有任何选项。@admdraw有几个使用重定向的选项,可以在这里找到:。我只是不完全确定多个重定向是否不是其中之一。可能会重复创建副本而不是拆分输出。这永远不会起作用。你最终只会得到
fileB
,而不是两份副本。很有趣。这是我以前从未尝试过的,所以您的问题和Rahul的回答对我也很有用。这会将stderror发送到文件B,而不是文件A发送到文件B。您需要找到一个名为Tee的实用程序。这是一个标准的unix命令,有许多windows端口。@triggeradeadcat,是否有一个windows等效于“tee”命令?您能保证每次运行abc.cmd都会得到相同的结果吗?这对我来说似乎是个坏主意。也许这在某些情况下可以使用,但总的来说是没有用的。此外,我认为这与简单地使用COPY复制输出文件没有什么好处。好主意,但不应该使用基于行的IO—它不适用于提示输入的程序。此外,还可以使用混合脚本使调用更容易。看见