
感悟批處理命令call的用法
- @echo off
- set tt=woshi
- call :nihao tt ss
- echo %tt% %ss% zheli %p%
- goto:eof
- echo 33333333333333333333333333
- :nihao
- set p=%1hundan
- set %2=333
- goto:eof
nclick="copycode($('code0'));">復制代碼
發表這個帖子,主要是感悟一下call的用法:第1、2行不解釋,第3行:call后:nihao 代表轉到一段批處理,這段批處理與運行的批處理在同一個大的批處理中,關鍵看后邊的兩個參數tt ss,tt ss都沒有帶百分號,所以這里暫時理解為準變量,后邊call轉到的批處理中,如果有對這個準變量的set,將會成為真正的變量,否則將只能代表字符串“ss”“tt”。第3行后,就運行到第7行,然后第8行:重新定義了新變量p,p被賦值為%1連接hundan這個字符串,%1即為第3行call標簽后的第一個參數tt,由于tt一直未被賦值,故tt只能代表字符串“tt”,所以這里的p就被賦值為tthundan;第9行:又是賦值,將333賦值給%2,%2就是第3行的第2個參數ss,相當于把333賦值給ss了,也就是ss就不是字符串“ss”了,而是一個變量ss,且ss被賦值為333。第10行:goto:eof,end of file,指結束當前這段批處理,結束后再返回到第3行結尾處,即開始運行第4行。第4行:echo了,根據上邊我們的分析,call后的批處理中,tt一直未被重新賦值,所以%tt%只能是第2行的值,即woshi;%ss%為9行賦值后的333;zheli因為一直未被賦值,只能保持原樣,即zheli;%p%為第8行的賦值tthundan;故輸出“woshi333zhelitthundan”。第5行:又goto eof了,從整個批處理來說,分為兩大段,這是主段的goto eof,會將結束整個批處理,所以第6行的echo將不再運行。
以上代碼是根據實際運行結果生拼硬套 強行解說的,如有不當、純屬正常,反正根據結果來說就得這么理解。