将命令的返回存储到bat文件中的变量中

时间:2013-04-23 14:48:04

标签: windows-7 batch-file

我有一个程序,我在其中列出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

2 个答案:

答案 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