天天看點

【批處理學習筆記】第二十四課:直接傳遞

    直接傳遞參數,即在使用call指令時,不使用任何參數,在子函數或子批處理裡面直接對主函數(也稱父批處理)裡面的變量進行修改。這跟彙編語言裡面的參數傳遞方式類似。

    直接傳遞參數舉例:

===============================================

@echo off

setlocal enabledelayedexpansion

set var=aCdehiM,?mnrstW y

echo %var%

call :deal

setlocal disabledelayedexpansion

set var=%var:?=!%

pause>nul

exit

:deal

set tm=!var!

set var=

for %%i in (6,3,11,11,16,15,1,4,11,5,12,13,9,0,12,7,15,14,5,10,2,16,18,8) do (

set var=!var!!tm:~%%i,1!

)

goto :eof

    可以發現,當我們把變量var作為參數賦予子函數:deal後,子函數對var的值進行了修改;當子函數傳回後,主函數裡面的var的值就已經是子函數裡面var被修改後的值了。

    該例子中,使用了本節課前面講到的setlocal enabledelayedexpansion和setlocal disabledelayedexpansion,前者保證了var在for循環裡面能夠根據我們的意願進行處理,後者保證了能夠正确輸出符号"!"。另外例子中還使用了指令set,利用set對字元串進行了處理。還有一個地方使用了語句goto :eof,該語句相當于C語言裡面的return或彙編語言裡面的RET,即子程式傳回指令。需要說明的是,當子函數本身就在批處理檔案的末尾的話,我們是可以省略這句話的,比如将此例的goto :eof删除是不會産生任何影響的。

繼續閱讀