0

我有一个程序,我在其中获取 IP 列表,对它们运行 nslookup,然后将它们存储到两个不同的文件中,一个包含 IP,一个仅包含 nslookup 的输出。要将对 nslookup 的调用减半,我想调用一次,将其存储在变量中,然后写入两个文件。但是,一个简单的商店是行不通的。

set val=nslookup %ip%

显示

nslookup 127.0.0.1

而不是运行它的结果。

我找到了一种方法来做到这一点

nslookup %ip% | find "Name"> tempFile
set /P result=<tempFile

但我现在正在写入文件,然后取回值。对于这个成本,我还不如调用 nslookup 两次。它还需要我选择一条线(这一次对我来说很好,但在其他情况下它可能不起作用)。

我也尝试过使用 for 循环技巧

for /f "delims=" %%a in ('nslookup %ip% ^| find "Name"') do set name=%%a

但这只会返回最后一行或我用 find 指定的一行。仍然比前面的示例更好,因为没有临时文件,但仍然不完美。

所以我的问题是,是否有更好的方法将命令的返回值存储到变量中。

编辑:考虑

nslookup 127.0.0.1

返回

Server: fake.com
Address:  0.0.0.0

Name:  localhost
Address:  127.0.0.1

现在,我想要的只是名称,因此返回一行适用于我当前的批处理文件。但是如果我还需要知道服务器怎么办,所以我想要

for /f "delims=" %%a in ('nslookup 127.0.0.1') do set returnVal=%%a
echo %returnVal%

显示

Server: fake.com
Address:  0.0.0.0

Name:  localhost
Address:  127.0.0.1

现在它只显示在哪里

Address:  127.0.0.1
4

2 回答 2

1

下面的批处理文件将 nslookup 显示的四个非空行存储在一个包含四个元素的数组中:

@echo off
setlocal EnableDelayedExpansion
set n=0
for /f "delims=" %%a in ('nslookup 127.0.0.1') do (
   set /A n+=1
   set returnVal[!n!]=%%a
)

rem To show all non-empty lines:
for /L %%i in (1,1,%n%) do echo !returnVal[%%i]!

rem Or:
echo Line with Name: %returnVal[3]%
于 2013-04-23T15:37:50.350 回答
0

尝试:

 @echo off
 setlocal
 for /f "usebackq tokens=1,2 delims=:" %%a in (`nslookup %ip%`) do echo %%a:%%b
于 2013-04-23T15:06:51.647 回答