Windows cmd 批处理文件将多个 netstat 输出写入文本文件

Windows cmd batch file write multiple netstat outputs to text file

我在一个文本文件中有一个由换行符分隔的主机名列表。我想在每一行上 运行 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 

在此先感谢您的帮助:)

您需要 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
)

要从 cmd set /?setlocal /?

中获取有关 delayedexpansion 运行 的更多详细信息

也就是说,你也不需要 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