0

IP のリストを取得して nslookup を実行し、2 つの異なるファイルに保存するプログラムがあります。1 つは IP が含まれているファイルで、もう 1 つは nslookup の出力だけです。nslookup への呼び出しを半分に減らすには、一度呼び出して変数に格納し、両方のファイルに書き込みます。しかし、単純な店は機能しません。

set val=nslookup %ip%

ディスプレイ

nslookup 127.0.0.1

実行した結果ではありません。

これを行う1つの方法を見つけました

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

しかし、私は今、ファイルに書き込んでから値を取り戻しています。そのコストのために、nslookup を 2 回呼び出すこともできます。また、単一の行を選択する必要があります (今回はこれで問題ありませんが、他の場合には機能しない可能性があります)。

for ループ トリックも使用してみました

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

しかし、これは最後の行またはfindで指定した1行のみを返します。一時ファイルがないため、前の例よりも優れていますが、まだ不完全です。

したがって、私の質問は、コマンドからの戻り値を変数に格納するためのより良い方法があるかどうかです。

編集:検討してください

nslookup 127.0.0.1

返す

Server: fake.com
Address:  0.0.0.0

Name:  localhost
Address:  127.0.0.1

今、私が欲しいのは名前だけなので、現在のバッチ ファイルでは 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 によって示される 4 つの空でない行を、4 つの要素を持つ配列に格納します。

@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 に答える