2013-04-23 58 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

相關問題