
[已解決]BAT啟用變量延遲后在For中如何輸出變量二次擴展的結果最后由 極品小貓 于 -10-20 00:31不知道標題與文章內容相不相符,求大神指點該問題算是 http://bbs.bathome.net/thread-18546-1-1.html 的一個延伸在這個帖子里解決了變量值作為變量名再賦值的問題,詳見下面的代碼
- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- for /f %%i in ('dir /b /ad') do (
- set /a num+=1
- set !num!=%%i
- echo !num!. %%i
- )
- echo,
- set /p i=請輸入要操作的用戶目錄編號:
- echo !%i%!
- ENDLOCAL
- pause
nclick="copycode($('code0'));">復制代碼
在 For 外,使用 !%i%! 成功顯示了 !num! 的賦值,得到了目錄名但是,如果想要在 For 中輸出 !num! 的賦值該如何做?查了很多關于 變量延遲、變量擴展、變量二次擴展、For 的技術帖和資料都沒找到方法。后來看到該帖子:http://bbs.bathome.net/viewthread.php?tid=16154如果要在For中如果想要輸出二次擴展后的值,需要以下條件1、在變量二次擴展時,變量名前面需要加一個字符(例如:逗號、句號)2、輸出二次擴展時需要用到Call ,方法為:call echo %%.!m!%%對于 %%.!m!%% 個人理解為:!m! 是輸出 第一次的變量延遲的結果Call 與兩對百分號產生了變量延遲的效果,從而獲得了二次擴展后的值但是讓我不理解的是,只有在加入那一個字符后才起作用,這個字符是作為分隔符嗎?還是在處理時實際上被忽略掉? 或者實際上就是第二個變量名?假如加了標點符號的是第二個變量名,那就不算是二次擴展了,但是在輸出時的引用方式中,卻又夾雜了二次擴展的影子。我已經被這個問題給搞暈了,無從判斷,求大神解救。以下為測試代碼:
- @echo off & setlocal enabledelayedexpansion
- set num=0
- for /f %%i in ('dir /b /ad') do (
- set/a n+=1
- call set .!n!=%%i
- call echo 當前行為:%%.!n!%%
- set/a m=!n!-1
- call echo 上一行為:%%.!m!%%
- echo,
- )
- echo,
- set /p i=請輸入要操作的用戶目錄編號:
- echo !.%i%!
- ENDLOCAL
- pause
nclick="copycode($('code1'));">復制代碼