程式碼如下
setlocal enabledelayedexpansion
set counterI=0
FOR /f "eol=; tokens=1 delims=," %%i in (username.txt) do (
set /A counterI = counterI + 1
set item[!counterI!] = %%i
echo item[!counterI!] = %%i
)
echo.
echo 清單內共有:!counterI! 帳號
echo 變數測試:item[%counterI%] = !item[%counterI%]!
pause
執行結果
item[1] = All Users
item[2] = Default
item[3] = Default User
item[4] = mtadministrator
item[5] = Public
item[6] = test1
清單內共有:6 帳號
變數測試:item[6] =
請按任意鍵繼續 . . .
最後的!item[%counterI%]!
為什麼沒反應?
有問題這行要改成
call echo 變數測試:item[!counterI!] = %%item[!counterI!]%%
因為要進行2次的變數替換,才能正確求出變數的值
第一次,在 call 後面的這些字串丟給 call 之前,已經替換成
echo 變數測試:item[6] = %item[6]%
第二次,在 echo 輸出前,又替換成
變數測試:item[6] = test1
以下可在 Win XP 上正確執行
@echo off
setlocal enabledelayedexpansion
set counterI=0
FOR /f "eol=; tokens=1 delims=," %%i in (username.txt) do (
set /A counterI = counterI + 1
set item[!counterI!]=%%i
echo item[!counterI!]=%%i
)
echo.
echo 清單內共有:!counterI! 帳號
call echo 變數測試:item[!counterI!] = %%item[!counterI!]%%
endlocal
item[1]=All Users
item[2]=Default
item[3]=Default User
item[4]=mtadministrator
item[5]=Public
item[6]=test1
清單內共有:6 帳號
變數測試:item[6] = test1
首先感謝前輩指點,再請問
1.加call是為了再呼叫一次嗎?
2.
不加call結果跟您說的一樣
變數測試:item[6] = %item[6]%
加了call之後再空了
變數測試:item[6] =
---------測試環境----------
vm win10 1909 會有差別嗎?
@echo off
setlocal enabledelayedexpansion
set counterI=0
FOR /f "eol=; tokens=1 delims=," %%i in (username.txt) do (
set /A counterI = counterI + 1
set item[!counterI!]=%%i
echo item[!counterI!]=%%i
)
echo.
echo 清單內共有:!counterI! 帳號
set str=變數測試:item[!counterI!] = %%item[!counterI!]%%
echo %str%
call echo %str%
endlocal
輸出:
item[1]=All Users
item[2]=Default
item[3]=Default User
item[4]=mtadministrator
item[5]=Public
item[6]=test1
清單內共有:6 帳號
變數測試:item[6] = %item[6]%
變數測試:item[6] = test1
感謝您的幫忙^^
沒錯,就是因為空格,太氣人了
BAT裡空格不是會略過嗎
又不是字串
若設定變數時「=」的兩邊有空白,
那變數名也會包含空白,
引用該變數時,也要記得包含空白。