欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

批處理命令之函數(shù)傳參和跳轉(zhuǎn)詳解

 更新時間:2023年08月29日 09:05:30   作者:微小冷  
這篇文章主要為大家詳細(xì)介紹了批處理命令中函數(shù)傳參和跳轉(zhuǎn)的相關(guān)應(yīng)用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

函數(shù)

函數(shù)封裝是編程語言必不可少的環(huán)節(jié),而函數(shù)在創(chuàng)建時,至少需要有一個函數(shù)標(biāo)識,同時需要一塊區(qū)域,來組成函數(shù)體。Dos中的函數(shù)用標(biāo)簽來標(biāo)識,以goto:eof結(jié)束,比如現(xiàn)在新建一個腳本func.bat

@echo off
call:func
echo end of call
goto:eof
:func
echo call me
goto:eof

上面4行類似于主函數(shù),@echo off關(guān)閉回顯,然后調(diào)用func,調(diào)用結(jié)束之后打印end of call,最后使用goto:eof,結(jié)束命令行。

下面三行可以理解為自定義函數(shù),內(nèi)容是打印call me。

運行結(jié)果如下

>test.bat
call me
end of call

即命令行先打印了call me,后打印end of call,說明其運行過程的確是先調(diào)用了func,然后再執(zhí)行的echo end of call。

參數(shù)傳遞

對于一個腳本來說,如果想在調(diào)用bat文件時進行參數(shù)傳遞,則可用%或者%~來標(biāo)識傳進來的參數(shù),二者的區(qū)別是,后者會自動刪除參數(shù)中的引號,而前者不會。例如下面一個名為para.bat的腳本

:: para.bat
@echo you've given me %1 or %~1

在命令行中調(diào)用的結(jié)果如下

>para "123"
you've given me "123" or 123

函數(shù)傳參也采用了這種邏輯,下面修改test.bat腳本如下

@echo off
call:func 100
echo end of call
goto:eof
:func
echo you've given me %1
goto:eof

運行結(jié)果如下

>test.bat
you've given me 100
end of call 

返回值

DOS函數(shù)沒有返回值,若想保留函數(shù)中的計算結(jié)果,要么將其設(shè)為全局變量,要么采用“參數(shù)引用”,即直接更改傳入?yún)?shù)的值。先來看第一種

:: func1.bat
@echo off
call :sum 10 20
echo sum(10,20)=%result%
goto :eof
:sum
set /a result=%1 + %2
goto :eof

其中采用set指令,將result設(shè)為傳入兩個參數(shù)的和,隨后在主程序中直接調(diào)用%result%,并得到了正確的結(jié)果,如下所示

>func1
sum(10,20)=30

另一種方法u是直接把想要返回的變量作為參數(shù)傳入函數(shù)中,示例如下

:: func2.bat
@echo off
call :sum 10 20 result
echo sum(10, 20)=%result%
goto :eof
???????:sum
set /a %3=%1 + %2
goto :eof

這里面把result作為參數(shù)傳入了sum函數(shù)中,而sum函數(shù)的邏輯是,讓傳入的第三個參數(shù)等于前兩個參數(shù)之和,這樣就在不創(chuàng)建“全局變量”的情況下,對result賦值了。

局部變量保護

通過set命令創(chuàng)建的變量,默認(rèn)就是全局的,這一點已經(jīng)在func1.bat中得到了認(rèn)證。但全局變量太多容易導(dǎo)致程序變得混亂,雖然不太可能用批處理語句去寫什么大工程,但就算用了兩次for循環(huán),都會引起全局變量變化的風(fēng)險,所以局部變量保護還是有存在的意義的。

在批處理語句中,setlocal和endlocal中間的函數(shù)段,set所設(shè)置的參數(shù)便是局部的。為此可對func1的sum函數(shù)稍作修改

:: func3.bat
:: 主程序與func1.bat相同
:sum
setlocal
set /a result=%1 + %2
endlocal
goto :eof

這樣運行結(jié)果就會變成

>func3.bat
sum(10,20)=

也就是說,result并沒有被賦值。

goto

goto是鼎鼎大名的跳轉(zhuǎn)指令,曾在歷史上引起過嚴(yán)重災(zāi)難,但對于命令行這種臨時使用的代碼很短的腳本來說,則算是無傷大雅。其作用是跳轉(zhuǎn)到某個標(biāo)簽所在的區(qū)塊,而標(biāo)簽則以冒號開頭。

由此觀之,:eof就是一個默認(rèn)的局部標(biāo)簽,表示當(dāng)前程序的結(jié)尾。下面做一個簡單的示例,用goto跳轉(zhuǎn)來打印BAT這三個字母。

:: BAT.bat
@echo off
goto:B
goto:eof
:A
echo A
goto :T
:B
echo B
goto :A
:T
echo T

效果如下

>bat
B
A
T

到此這篇關(guān)于批處理命令之函數(shù)傳參和跳轉(zhuǎn)詳解的文章就介紹到這了,更多相關(guān)批處理命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論