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

