此问题已经在这里有了答案:
我有一个主机名列表,在文本文件中用新行分隔。我想在每行上运行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
)
要获取有关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
)
由于我没有看到实际的输入文件,如果您想从for
命令获得整个输出,也可以消除第二个netstat
循环。
@echo off
(for /f "tokens=*" %%i in (fqdn.txt) do (
netstat %%i
echo delim
)
)>>test.txt