2013-04-23 37 views
0

我有一个程序,我在其中运行nslookup,然后将它们存储到两个不同的文件中,一个包含IP,一个只有nslookup的输出。为了将我对nslookup的调用减半,我想调用它一次,将它存储在一个变量中,然后写入这两个文件。但是,一个简单的商店不起作用。从一个命令存储返回到一个bat文件中的变量

set val=nslookup %ip% 

显示器

nslookup 127.0.0.1 

和未运行它的结果。

我发现其中一种方法,这是

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

,但我现在写一个文件,然后让值回。为了这个成本,我不妨叫nslookup两次。它也要求我选择一条线(这次对我来说很好,但对于其他情况可能不起作用)。

我还使用了循环招

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

尝试,但这只返回的最后一行或一条线我发现指定。由于没有临时文件,但仍比上一个例子好,但仍不完善。

所以我的问题是如果有一些更好的方法来存储从命令返回值到变量。

编辑: 考虑

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

鉴于输出是两条线(至少)什么样的信息是你想提取?一个例子会很好。 – Magoo 2013-04-23 15:02:38

回答

1

下面的批处理文件存储四个非空l通过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]% 
+0

看来我需要将它存储在一个数组中。谢谢。 – Lawtonfogle 2013-04-23 15:56:38

0

尝试:

@echo off 
setlocal 
for /f "usebackq tokens=1,2 delims=:" %%a in (`nslookup %ip%`) do echo %%a:%%b 
+0

'for/f“usebackq tokens = 1,2 delims =:”%% a in('nslookup 127.0.0.1')do echo %% a:%% b' returns'nslookup 127.0.0.1:'。难道我做错了什么? – Lawtonfogle 2013-04-23 15:21:22

+0

你必须使用反向引号。这就是usebackq所做的。它共享kb上的〜键。从cmd提示读取/?并向底部解释它。 – 2013-04-23 15:40:28

+0

回声产生正确的输出,但是当我存储它时,它只存储最后一行。 – Lawtonfogle 2013-04-23 15:55:47

相关问题