婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 一個“靈異”批處理引發的思考加補充說明

一個“靈異”批處理引發的思考加補充說明

熱門標簽:百應ai電話機器人銷售怎么樣 地圖標注銷售數據 廣州云外呼系統公司 云南旅游地圖標注app 中國地圖標注省份顏色 岳陽縣地圖標注app 地圖標注位置有用嗎 好的人工智能電話機器人 谷歌地圖標注時間
批處理的要求是:隨機顯示的數字為(6,7,8,9,10,11,12,14,15,16,17)為其中的一個

注:里面沒有13的

下面的兩個代碼,第一個出錯,第二個卻成功了,但他們的區別只是第一個(%random%)%%(%n%)+1運算后的值賦予%tn%,而第二個則將運算后的值繼續賦予%n%……
復制代碼 代碼如下:

@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 

復制代碼 代碼如下:

@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 /a "tn=(%random%)%%(%n%)+1"這個語句里面被賦值的變量名稱只能是一個字符的,多于一個字符也會出錯(測試過,和for無關),但如果把賦值表達式兩邊的引號也去掉,則不會出現這個錯誤!

狂倒……
for %%i in (%string%) do call set /a "n=%%n%%+1"

這個語句讓偶理解了好半天:
我們知道批處理在運行過程中,在讀取每條語句/執行每個命令都會擴充一次語句/命令里的變量。
我們來看看這個例子發生了什么事情:
在讀取for語句時,%%n%%被擴充為%n%,即do的是call set /a "n=%n%+1"。
此時我們也許會認為直接set /a "n=%n%+1"不就行了嗎,call是多此一舉。
但是,實際上在這個例子里,如果省略call,set命令會出錯,提示“找不到操作數。”
為什么呢?因為讀取for時已經擴充過一次,所以for語句會剝奪do后第一個命令擴充變量的權力。
所以,省略call后,set不再擴充%n%,認為%n%不是數字,所以出錯了。
經過call之后,set命令再次擴充%n%,即使%n%未賦值也能被擴充為空,此時就可以進行set運算了。
即call并沒有擴充變量,只是起到了把set命令與for語句隔開的作用,讓set不被for剝奪擴充變量的權力。
當然,你認為是call擴充的也可以,效果一樣,雖然實際過程不相同。
當%%i=6時,%n%被擴充為空,set把n賦值為1
當%%i=7時,%n%被擴充為1,set把n賦值為2
當%%i=8時,%n%被擴充為2,set把n賦值為3
以此類推。

舉例理解:
set n=123
for %%i in (1) do echo %%n%%
pause

在運行這個批處理的時候,我們看到的是for %i in (1) do echo %n%
即是說,讀取for語句的時候,%%n%%已經被擴充為%n%
如果echo還具有擴充變量的權力,echo %n%應該顯示%n%的真實值123
實際上,echo原原本本的顯示“%n%”
說明,for把echo擴充變量的權力剝奪了。

當然,您平時一定是直接for %%i in (1) do echo %n%
但是,這個“靈異”批處理是想引用一個不被for擴充的變量,而又想在do里能夠得到擴充,也就是說想達到延遲環境變量的效果。目的就是使用一個遞增變量統計%string%包含了多少個字符。

偶對六翼刺猬的無限崇敬,有如滔滔長江,連綿不絕,又如黃河泛濫,一發而不可收拾!

標簽:宜昌 周口 南京 鄭州 三明 東營 天門 三沙

巨人網絡通訊聲明:本文標題《一個“靈異”批處理引發的思考加補充說明》,本文關鍵詞  一個,靈異,批處理,引發,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《一個“靈異”批處理引發的思考加補充說明》相關的同類信息!
  • 本頁收集關于一個“靈異”批處理引發的思考加補充說明的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 兰溪市| 建水县| 安徽省| 三河市| 西城区| 温州市| 象州县| 北流市| 建水县| 长武县| 错那县| 玉林市| 永年县| 南汇区| 清新县| 馆陶县| 井陉县| 海阳市| 澎湖县| 察雅县| 盐山县| 明溪县| 板桥市| 弋阳县| 明水县| 鹿泉市| 龙游县| 右玉县| 广宁县| 平和县| 兴安县| 盐城市| 澜沧| 锦屏县| 通许县| 海宁市| 许昌市| 大田县| 龙里县| 翁牛特旗| 双桥区|