Windows 7 将命令返回值存储到bat文件中的变量中
我有一个程序,在其中我获取IP列表,对它们运行nslookup,然后将它们存储到两个不同的文件中,一个包含IP,另一个只包含nslookup的输出。为了将对nslookup的调用减半,我想调用它一次,将其存储在变量中,然后写入这两个文件。但是,一个简单的商店是行不通的Windows 7 将命令返回值存储到bat文件中的变量中,windows-7,batch-file,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
set val=nslookup %ip%
显示
nslookup 127.0.0.1
而不是运行它的结果
我找到了一个方法,就是
nslookup %ip% | find "Name"> tempFile
set /P result=<tempFile
但这只返回最后一行或我用find指定的那一行。仍然比前面的示例更好,因为没有临时文件,但仍然不完善
所以我的问题是,是否有更好的方法将返回值从命令存储到变量
编辑:
考虑
返回
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
尝试:
下面的批处理文件将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]%
如果输出是两行(至少),您试图提取什么信息?举个例子就可以了。
for/f“usebackq tokens=1,2 delims=:”%%a in('nslookup 127.0.0.1')do echo%%a:%%b
返回nslookup 127.0.0.1:
。我做错什么了吗?你必须用反引号。这就是usebackq所做的。它共享kb上的~键。从cmd提示符读取/?它向底部解释。Echo产生正确的输出,但当我存储它时,它只存储最后一行。这是有意义的。Var会一直被覆盖,直到最后一行。每次迭代都会发出回声,这就是它工作的原因。如果有办法在变量之间插入换行符,请设置var=!瓦尔!换行符%%a:%%b可以这样做,但我不知道如何在变量之间插入回车符。看来我需要将其存储在数组中。谢谢
Address: 127.0.0.1
@echo off
setlocal
for /f "usebackq tokens=1,2 delims=:" %%a in (`nslookup %ip%`) do echo %%a:%%b
@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]%