亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

函數(shù)

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

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

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

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

運(yùn)行結(jié)果如下

>test.bat
call me
end of call

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

參數(shù)傳遞

對(duì)于一個(gè)腳本來(lái)說(shuō),如果想在調(diào)用bat文件時(shí)進(jìn)行參數(shù)傳遞,則可用%或者%~來(lái)標(biāo)識(shí)傳進(jìn)來(lái)的參數(shù),二者的區(qū)別是,后者會(huì)自動(dòng)刪除參數(shù)中的引號(hào),而前者不會(huì)。例如下面一個(gè)名為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

運(yùn)行結(jié)果如下

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

返回值

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

:: 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è)為傳入兩個(gè)參數(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ù)的邏輯是,讓傳入的第三個(gè)參數(shù)等于前兩個(gè)參數(shù)之和,這樣就在不創(chuàng)建“全局變量”的情況下,對(duì)result賦值了。

局部變量保護(hù)

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

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

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

這樣運(yùn)行結(jié)果就會(huì)變成

>func3.bat
sum(10,20)=

也就是說(shuō),result并沒(méi)有被賦值。

goto

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

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

:: 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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論