У меня есть программа, в которой я беру список IP-адресов, запускаю на них 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
, но это возвращает только самую последнюю строку или одну строку я указать с находкой. Еще лучше, чем в предыдущем примере, поскольку нет временных файлов, но все же несовершенен.
Так что мой вопрос в том, есть ли лучший способ сохранить возвращаемое значение из команды в переменную.
Edit: Рассмотрим
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
Учитывая выход две линий (по крайней мере), какую информацию вы пытаетесь извлечь? Пример будет хорошим. – Magoo