我创建了一个批处理文件,该文件应该将三个附加的接口描述分配为自定义变量,然后打印这些变量。最终我没有打印,而是计划根据输出使用这些变量来配置接口本身,但现在我很高兴看到它正确地分配变量。
这就是我试图解决的问题:
set cnt=1
for /f "tokens=12,13*" %%f in ('ipconfig /all^|findstr "Description"') do (
setlocal enabledelayedexpansion
set "mess.!cnt!.name=%%h"
endlocal
set /a cnt+=1
)
echo mess.0.name
for /l %%t in (1,1,%cnt%) do (
echo mess.%%t.name
echo "%mess.0.name%"
)
pause
虽然我使用delayedexpansion几乎完成了所有可能的方法,但我无法让批处理文件将mess.cnt.name视为随每个循环递增的变量。
以下是输出示例:
C:\Users\admin\Desktop>test1.bat
C:\Users\admin\Desktop>set cnt=1
C:\Users\admin\Desktop>for /F "tokens=12,13*" %f in('ipconfig /all|findstr "Des
cription"') do (
setlocal enabledelayedexpansion
set "mess.!cnt!.name=%h"
endlocal
set /a cnt+=1
)
C:\Users\admin\Desktop>(
setlocal enabledelayedexpansion
set "mess.!cnt!.name=AirLink USB Ethernet/RNDIS"
endlocal
set /a cnt+=1
)
C:\Users\admin\Desktop>(
setlocal enabledelayedexpansion
set "mess.!cnt!.name=LAN9500 USB 2.0 to Ethernet 10/100 Adapter"
endlocal
set /a cnt+=1
)
C:\Users\admin\Desktop>(
setlocal enabledelayedexpansion
set "mess.!cnt!.name=Intel(R) 82579LM Gigabit Network Connection"
endlocal
set /a cnt+=1
)
C:\Users\admin\Desktop>echo mess.0.name
mess.0.name
C:\Users\admin\Desktop>for /L %t in (1 1 4) do (
echo mess.%t.name
echo "Intel(R) 82579LM Gigabit Network Connection"
)
C:\Users\admin\Desktop>(
echo mess.1.name
echo "Intel(R) 82579LM Gigabit Network Connection"
)
mess.1.name
"Intel(R) 82579LM Gigabit Network Connection"
C:\Users\admin\Desktop>(
echo mess.2.name
echo "Intel(R) 82579LM Gigabit Network Connection"
)
mess.2.name
"Intel(R) 82579LM Gigabit Network Connection"
C:\Users\admin\Desktop>(
echo mess.3.name
echo "Intel(R) 82579LM Gigabit Network Connection"
)
mess.3.name
"Intel(R) 82579LM Gigabit Network Connection"
C:\Users\admin\Desktop>(
echo mess.4.name
echo "Intel(R) 82579LM Gigabit Network Connection"
)
mess.4.name
"Intel(R) 82579LM Gigabit Network Connection"
C:\Users\admin\Desktop>pause
Press any key to continue . . .
对此的任何帮助将不胜感激。几天来,我一直在靠墙打我的头。
维克多
答案 0 :(得分:0)
@ECHO OFF
SETLOCAL
set cnt=0
for /f "tokens=1,14*" %%f in ('ipconfig /all^|findstr "Description"^|find /n /v ""') do (
set "mess%%fname=%%h"
set /a cnt+=1
)
echo %mess[1]name%
for /l %%t in (1,1,%cnt%) do (
CALL echo mess[%%t]name=%%mess[%%t]name%%
)
SET mess
GOTO :EOF
基本上,endlocal
正在退出mess.?.name
的设置,并且经典的修复方法在代码块中不起作用。
同样,报告循环(我添加了另一种方式)您需要设置delayedexpansion
来显示,或者使用我显示的语法。
现在 - 如果您在整个例程中只放置一个setlocal/endlocal
并且未在代码块中切换,那么它可能更容易工作。
或者 - 您可以调用内部子例程来执行set
ting ...