我有一个程序,我在其中列出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 loop技巧
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
答案 0 :(得分: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]%
答案 1 :(得分:0)
尝试:
@echo off
setlocal
for /f "usebackq tokens=1,2 delims=:" %%a in (`nslookup %ip%`) do echo %%a:%%b