Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 7 将命令返回值存储到bat文件中的变量中_Windows 7_Batch File - Fatal编程技术网

Windows 7 将命令返回值存储到bat文件中的变量中

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

我有一个程序,在其中我获取IP列表,对它们运行nslookup,然后将它们存储到两个不同的文件中,一个包含IP,另一个只包含nslookup的输出。为了将对nslookup的调用减半,我想调用它一次,将其存储在变量中,然后写入这两个文件。但是,一个简单的商店是行不通的

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]%