CMD-同时连续地将完整循环打印到屏幕和文件上

时间:2019-06-16 05:22:11

标签: windows batch-file cmd command-line-interface

TL; DR;

在Win上的CMD批处理文件中-如何同时/连续地向文件和屏幕同时添加/打印完整循环输出?

长版:

我知道这更像是powershell / bash任务,或者通常更适合* nix /管道,但是由于某些原因,我需要在win(7!)batch / cmd上执行该操作。

我有一个有点被黑的超级简单小原始循环(在win 7上),它带有一些网络任务,每隔x秒检查一次(本地)DNS列表更新,刷新本地DNS,然后再次检查传播情况。从赢到后来被另一个脚本解析。

@echo off
set "domain=mydomain.TLD"
set "dns_host=dnshost.TLD"
set "NS1=ns1.dnshost.TLD"
set "NS2=ns1.dnshost.TLD"
set "neutralDNS=8.8.8.8"
set "timeout=60"
set "outputfile=myfile.txt"
FOR /L %%A IN (1,1,200) DO (
ECHO ************************************************  
ECHO ********* Checking %domain% On %NS1% //  %NS2%
ECHO ************* Loop Count :: %%A  %Time% 
ipconfig /flushdns
timeout  %timeout% 
ping %domain%
ping %dns_host%
ping %NS1%
ping %NS2%
nslookup %domain% %neutralDNS%
nslookup %dns_host% %NS1% 
nslookup ns1.%dns_host%

REM ... Loop goes on here, commands are not really important
REM host %dns_host%// we are not on *nix !
REM dig  %dns_host% @%neutralDNS% // we are not on *nix !
)

我想将循环的输出附加到文件和屏幕上,但是当我尝试用>> myfile.txt附加输出时:

 FOR /L %%A IN (1,1,200) DO (
    ECHO ************* Loop Count :: %%A  %Time% 
   ......
    ) >> %outputfile%

执行完全失败,并且当我尝试使用> myfile输出到文件时:

 FOR /L %%A IN (1,1,200) DO (
    ECHO ************* Loop Count :: %%A  %Time% 
   ......
    ) > %outputfile%

文件每次迭代都会覆盖自身。

另一个问题是,除了显式回声之外,这两种情况都没有屏幕输出。

1 个答案:

答案 0 :(得分:1)

根据@Stephan注释和poor's man solution(或original code)的实现,其中包括创建一个临时文件,然后type行写在该临时文件中。可以正常工作的代码可以写为

.
.
.

set "outputfile=myfile.txt"

::Poor's man solution
set "display=> _ & type _ & type _ >> %outputfile%"

FOR /L %%A IN (1,1,200) DO (
ECHO ************************************************ %display%
ECHO ********* Checking %domain% On %NS1% // %NS2% %display%
ECHO ************* Loop Count :: %%A %Time% %display%

::Simple test
ping 127.0.0.1 %display%

.
.
.

)

del /q /f _

循环结束后,我们应该del / erase临时文件。

详细解释

这段代码可以分为三个步骤。首先使用>将输出重定向到_,然后将type的内容重定向到_,最后将_的内容附加到%outputfile%中。由于它是逐行进行的,因此我们仅附加每个命令的结果输出。