直接傳遞參數,即在使用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删除是不會産生任何影響的。