@echo off set "string=6 7 8 9 10 11 12 14 15 16 17" for %%i in (%string%) do call set /a "n=%%n%%+1" set /a "tn=(%random%)%%(%n%)+1" for /f "usebackq tokens=%tn% delims= " %%i in ('%string%') do echo %%i pause goto :EOF
復(fù)制代碼 代碼如下:
@echo off set "string=6 7 8 9 10 11 12 14 15 16 17" for %%i in (%string%) do call set /a "n=%%n%%+1" set /a "n=(%random%)%%(%n%)+1" for /f "usebackq tokens=%n% delims= " %%i in ('%string%') do echo %%i pause goto :EOF
舉例理解: set n=123 for %%i in (1) do echo %%n%% pause
在運(yùn)行這個(gè)批處理的時(shí)候,我們看到的是for %i in (1) do echo %n% 即是說(shuō),讀取for語(yǔ)句的時(shí)候,%%n%%已經(jīng)被擴(kuò)充為%n% 如果echo還具有擴(kuò)充變量的權(quán)力,echo %n%應(yīng)該顯示%n%的真實(shí)值123 實(shí)際上,echo原原本本的顯示“%n%” 說(shuō)明,for把echo擴(kuò)充變量的權(quán)力剝奪了。
當(dāng)然,您平時(shí)一定是直接for %%i in (1) do echo %n% 但是,這個(gè)“靈異”批處理是想引用一個(gè)不被for擴(kuò)充的變量,而又想在do里能夠得到擴(kuò)充,也就是說(shuō)想達(dá)到延遲環(huán)境變量的效果。目的就是使用一個(gè)遞增變量統(tǒng)計(jì)%string%包含了多少個(gè)字符。