0
我已經創建了一個批處理文件,該文件應該將三個連接的接口描述分配爲自定義變量,然後打印這些變量中的每一個。最終,我不打算打印使用這些變量來根據輸出配置接口本身,但現在很高興看到它正確地分配變量。使用遞增變量的批處理文件FOR循環
這是我正在努力解決這個:
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 . . .
任何幫助將非常感激。這幾天我一直在我的頭上撞牆。
維克多
謝謝你脫線救了我的理智。你是我最好的朋友。然而,我想知道爲什麼在echo命令之前需要CALL。仍然無法找到關於這個技巧的細節。 – Victor
@Victor,如果這個答案對您有幫助,請考慮通過點擊接下來的勾號來接受它;這標誌着你的問題已解決,並顯示其他用戶的這篇文章的價值...... – aschipfl
'CALL ECHO'是一個解析技巧。調用''的參數被解析,然後執行。解析器使用'%'替換'%% t'(一個當前的元變量)和其他'%%'(因爲'%'轉義'%')。因此,執行的是回聲混亂[* valueof %% t *] name =%mess [* valueof %% t *] name%' – Magoo