【问题标题】:Windows cmd batch file write multiple netstat outputs to text file [duplicate]Windows cmd批处理文件将多个netstat输出写入文本文件[重复]
【发布时间】:2019-10-31 05:11:33
【问题描述】:

我有一个由文本文件中的新行分隔的主机名列表。我想在每一行上运行 netstat 并将所有这些命令的输出写入文本文件。我知道 netstat 命令可以在每一行上运行,所以这不是问题。

这是我目前在 .bat 中的内容:

FOR /F "tokens=*" %%A in (fqdn.txt) do (
    FOR /F "tokens=* USEBACKQ" %%F IN (`netstat %%A`) DO (
        SET var=%%F
    )

    echo %var% >> test.txt
    echo delim >> test.txt
)

所发生的只是 netstat 帮助一遍又一遍地发布到命令行,文本文件填满:

ECHO is on.
delim 
ECHO is on.
delim 
ECHO is on.
delim 

提前感谢您的帮助:)

【问题讨论】:

    标签: windows batch-file cmd netstat


    【解决方案1】:

    您需要delayedexpansion,因为您在代码块内设置和使用变量:

    @echo off
    setlocal enabledelayedexpansion
    for /f "tokens=*" %%A in (fqdn.txt) do (
    for /f "tokens=* USEBACKQ" %%F IN (`netstat %%A`) DO (
        SET var=%%F
      )
       echo !var! >> test.txt
       echo delim >> test.txt
    )
    

    要了解更多关于delayedexpansion 的详细信息,请运行cmd set /?setlocal /?

    话虽如此,你也不需要delayedexpansion

    @echo off
    for /f "tokens=*" %%A in (fqdn.txt) do (
    for /f "tokens=* USEBACKQ" %%F IN (`netstat %%A`) DO (
        echo %%F >> test.txt
      )
       echo delim >> test.txt
    )
    

    由于我没有看到实际的输入文件,如果您想要 netstat 命令的整个输出,也可以消除第二个 for 循环。

    @echo off
    (for /f "tokens=*" %%i in (fqdn.txt) do (
        netstat %%i
        echo delim
     )
    )>>test.txt
    

    【讨论】:

    • 内部for 循环的目的是仅获取netstat 输出的最后一行
    • @Stephan True。我没有运行实际的命令,也没有看到 OP 的原始文件,所以在假设上工作。谢谢。会更新。
    • 抱歉,回复延迟,但是这有帮助。我的部分问题是我实际使用的是命令 nslookup,但您的回答帮助指导了我。
    猜你喜欢
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多