我创建了一个批处理文件,该文件应该将三个附加的接口描述分配为自定义变量,然后打印每个变量。 最终,我计划使用这些变量根据输出本身配置接口,而不是打印,但现在我很高兴看到它正确分配变量。
这就是我试图解决这个问题的方式:
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
尽管我已经使用延迟扩展完成了几乎所有可以想象的方法,但我无法让批处理文件将 mess.cnt.name 视为随每个循环递增的变量。
下面是输出的示例:
C:UsersadminDesktop>test1.bat
C:UsersadminDesktop>set cnt=1
C:UsersadminDesktop>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:UsersadminDesktop>(
setlocal enabledelayedexpansion
set "mess.!cnt!.name=AirLink USB Ethernet/RNDIS"
endlocal
set /a cnt+=1
)
C:UsersadminDesktop>(
setlocal enabledelayedexpansion
set "mess.!cnt!.name=LAN9500 USB 2.0 to Ethernet 10/100 Adapter"
endlocal
set /a cnt+=1
)
C:UsersadminDesktop>(
setlocal enabledelayedexpansion
set "mess.!cnt!.name=Intel(R) 82579LM Gigabit Network Connection"
endlocal
set /a cnt+=1
)
C:UsersadminDesktop>echo mess.0.name
mess.0.name
C:UsersadminDesktop>for /L %t in (1 1 4) do (
echo mess.%t.name
echo "Intel(R) 82579LM Gigabit Network Connection"
)
C:UsersadminDesktop>(
echo mess.1.name
echo "Intel(R) 82579LM Gigabit Network Connection"
)
mess.1.name
"Intel(R) 82579LM Gigabit Network Connection"
C:UsersadminDesktop>(
echo mess.2.name
echo "Intel(R) 82579LM Gigabit Network Connection"
)
mess.2.name
"Intel(R) 82579LM Gigabit Network Connection"
C:UsersadminDesktop>(
echo mess.3.name
echo "Intel(R) 82579LM Gigabit Network Connection"
)
mess.3.name
"Intel(R) 82579LM Gigabit Network Connection"
C:UsersadminDesktop>(
echo mess.4.name
echo "Intel(R) 82579LM Gigabit Network Connection"
)
mess.4.name
"Intel(R) 82579LM Gigabit Network Connection"
C:UsersadminDesktop>pause
Press any key to continue . . .
对此的任何帮助将不胜感激。 几天来,我一直在用头撞墙。
胜利者
@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