如何使用批处理文件从输出中获取特定行?

时间:2014-02-24 21:52:10

标签: windows batch-file

我有下面的代码,它返回给定服务器的主机名和IP地址。我怎样才能将主机名作为输出?

FOR /F %%i in (servers.txt) do FOR /F "skip=3 delims=: tokens=2 usebackq" %%j in (`nslookup %%i`) do @echo %%j >> Devices_With_IP.txt

2 个答案:

答案 0 :(得分:1)

尝试在findstr的输出上使用nslookup命令,只获取包含“名称”的行。

FOR /F %%i in (servers.txt) do FOR /F "tokens=2 usebackq delims=: " %%j in (`nslookup %%i ^| findstr Name`) do @echo %%j >> Devices_With_IP.txt

请注意,我还重新排列了第二个循环中的/F条件,以便将空格包含为分隔符,这将删除输出前的前导空格。

使用find命令代替findstr -

FOR /F %%i in (servers.txt) do FOR /F "tokens=2 usebackq delims=: " %%j in (`nslookup %%i ^| find "Name"`) do @echo %%j >> Devices_With_IP.txt

刚才意识到使用find而不是findstr使得(几乎)与dbenham的答案完全相同。

答案 1 :(得分:1)

假设您的机器使用英语:

FOR /F %%i in (servers.txt) do FOR /F "delims=: tokens=2" %%j in (
  'nslookup %%i ^| find "Name:"'
) do @echo %%j >> Devices_With_IP.txt