这并不是我们想要的结果,所以我们需要改进。最先能想到的,我们可以将所有的命令输出首先重定向到文件,然后在最护 type 这个文件到控制台上。这似乎是个不错的方案,至少它解决了第一个问题,而且也足够简单。
dir > cmd.log
cd >> cmd.log
...
type cmd.log
========================================
但仍然有新的问题,比如在很多时候,我们希望在执行了某些命令后,能够立即查看它的输出,我们可以此时就 type 这个文件,但如果以后有新的命令输出需要重定向,我们就面临两难:如果在查看完旧的命令日志后删除它,则日志文件将缺少前面的命令输出;而如果不删除,继续用>>添加新的内容,则在随后的 type 时,前面的命令输出将再次输出到屏幕上。
Set StdIn = WScript.StdIn
Set StdOut = WScript.StdOut
Set Args=WScript.Arguments
LogFile=Args(0)
Set fso = CreateObject("Scripting.FileSystemObject")
Set LogFile= fso.CreateTextFile(Args(0))
Do While Not StdIn.AtEndOfStream
str = StdIn.ReadLine
StdOut.WriteLine str
LogFile.WriteLine str
Loop