溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

批處理命令call和start怎么應(yīng)用

發(fā)布時(shí)間:2022-08-17 15:36:04 來(lái)源:億速云 閱讀:164 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“批處理命令call和start怎么應(yīng)用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“批處理命令call和start怎么應(yīng)用”吧!

call命令總結(jié)

學(xué)過(guò)匯編或C的朋友,肯定都知道call指令表示什么意思。其實(shí),在這里它的意思也是一樣的。在批處理腳本中,call命令用來(lái)從一個(gè)批處理腳本中調(diào)用另一個(gè)批處理腳本。

  語(yǔ)法:call[ [Drive:] [Path]FileName[BatchParameters]][:label[arguments]]

  參數(shù):[Drive:][Path]FileName指定要調(diào)用的批處理程序的位置和名稱。Filename參數(shù)必須是.bat或.cmd擴(kuò)展名的類型文件。

  BatchParameters 指定批處理程序所需的命令行信息(即參數(shù)項(xiàng))。

  調(diào)用另一個(gè)批處理程序,并且不終止父批處理程序(如果不用call而直接調(diào)用別的批處理文件,那么執(zhí)行完那個(gè)批處理文件后將無(wú)法返回當(dāng)前文件并執(zhí)行當(dāng)前文件的后續(xù)命令)。

  call 命令接受用作跳轉(zhuǎn)目標(biāo)的標(biāo)簽。如果在腳本或批處理文件外使用call,它將不會(huì)在命令行起作用。

call命令應(yīng)用

1. 基本應(yīng)用。應(yīng)用示例:新建兩個(gè)文本文件,一個(gè)命名為call1,修改文件的類型為bat,用Notepad++打開編輯內(nèi)容為:

echo running call1

另一個(gè)命名為call2,修改文件類型為bat,用Notepad++打開編輯內(nèi)容為:

 @echo off
 echo start
 call call1.bat
 echo running call2
 echo end
 pause

雙擊執(zhí)行call2文件,執(zhí)行結(jié)果如下所示:

批處理命令call和start怎么應(yīng)用

過(guò)程解析:

  可以很清晰的看到,call調(diào)用類似于函數(shù)調(diào)用的執(zhí)行邏輯:call2相當(dāng)于執(zhí)行主函數(shù),在其執(zhí)行過(guò)程中,需要調(diào)用到call1函數(shù),當(dāng)call1執(zhí)行結(jié)束后,call2主函數(shù)再繼續(xù)執(zhí)行本身的命令,直至整個(gè)過(guò)程結(jié)束。

  注意:call1腳本第一行沒有再寫@echo off語(yǔ)句。因?yàn)閏all2第一行已經(jīng)關(guān)閉了命令回顯狀態(tài),當(dāng)call2調(diào)用call1時(shí),此設(shè)置同樣有效,由此可更深入理解調(diào)用。

2. 調(diào)用標(biāo)簽。應(yīng)用示例:新建兩個(gè)文本文件,一個(gè)命名為call3,修改文件的類型為bat,用Notepad++打開編輯內(nèi)容為:

@echo off
call :label
echo 1
echo 2
 
:label
echo 3
echo 4

另一個(gè)命名為call4,修改文件類型為bat,用Notepad++打開編輯內(nèi)容為:

 @echo off
 call call3.bat
 pause

雙擊執(zhí)行call4文件,執(zhí)行結(jié)果如下所示:

批處理命令call和start怎么應(yīng)用

過(guò)程解析:

  看到這個(gè)結(jié)果什么感覺?讓你想起了什么呢?想不起來(lái)啥?一看你若有所茫的樣子,就知道你把goto與這個(gè)搞混了!請(qǐng)看下文call命令與goto命令的區(qū)別。

3. 調(diào)用帶參數(shù)的批處理。應(yīng)用示例:新建兩個(gè)文本文件,一個(gè)命名為call7,修改文件的類型為bat,用Notepad++打開編輯內(nèi)容為:

 echo %1 %2
 echo %3

另一個(gè)命名為call8,修改文件類型為bat,用Notepad++打開編輯內(nèi)容為:

 @echo off
 call call7.bat hello world 123
 dir c:\
 pause

雙擊執(zhí)行call8文件,執(zhí)行結(jié)果如下所示:

批處理命令call和start怎么應(yīng)用

call命令與goto命令的區(qū)別

  call命令的應(yīng)用示例2中,我們看到了call命令對(duì)跳轉(zhuǎn)標(biāo)簽的調(diào)用,注意調(diào)用時(shí)必須在標(biāo)簽名前加冒號(hào),而goto是直接跟標(biāo)簽名。

  同上例,我們?cè)倏纯磄oto的執(zhí)行效果:新建兩個(gè)文本文件,一個(gè)命名為call5,修改文件的類型為bat,用Notepad++打開編輯內(nèi)容為:

@echo off
goto label
echo 1
echo 2
 
:label
echo 3
echo 4

另一個(gè)命名為call6,修改文件類型為bat,用Notepad++打開編輯內(nèi)容為:

@echo off
call call5.bat
pause

雙擊執(zhí)行call6文件,執(zhí)行結(jié)果如下所示:

批處理命令call和start怎么應(yīng)用

start命令總結(jié)

start命令簡(jiǎn)介

start命令比較復(fù)雜。查看其幫助文檔的步驟如下:

  1. 同時(shí)按下“Win + R”鍵(或者桌面開始-->開始-->運(yùn)行),打開“運(yùn)行”窗口,輸入“cmd”-->確定。

  2. 在打開的命令提示符窗口里,輸入start/?-->回車,查看“start”命令的參數(shù)和用法說(shuō)明(注:按任意鍵可以查看更多后面的內(nèi)容)示例截圖如下:

批處理命令call和start怎么應(yīng)用

3. 命令提示符窗口里,按自己的使用需要,輸入-->start/具體參數(shù)-->回車,即可按自己的需要、在Windows系統(tǒng)里使用“start”命令

start命令應(yīng)用

1.基本應(yīng)用。打開系統(tǒng)計(jì)算器以及記事本。

  新建一個(gè)文本文件,命名為start1,修改文件類型為bat,用Notepad++打開編輯內(nèi)容為:

 start calc
 start notepad
 exit

執(zhí)行結(jié)果:分別打開計(jì)算器和記事本,同時(shí)終端一閃而過(guò)(因?yàn)樽詈骵xit)。

start命令與call命令的區(qū)別

start命令應(yīng)用示例:新建兩個(gè)文本文件,一個(gè)命名為startmain,修改文件類型為bat,用Notepad++打開編輯內(nèi)容為:

@echo off
set a=1
pause>nul
echo start startchild.bat
start startchild.bat
echo end start
pause>nul
echo %b%
pause>nul

一個(gè)命名為startchild,修改文件類型為bat,用Notepad++打開編輯內(nèi)容為:

 @echo off
 echo %a%
 set b=20
 pause>nul

雙擊執(zhí)行startmain.bat,觀察其運(yùn)行結(jié)果如下圖所示:

批處理命令call和start怎么應(yīng)用

相同的應(yīng)用,如果改為call命令:新建兩個(gè)文本文件,一個(gè)命名為callmain,修改文件類型為bat,用Notepad++打開編輯內(nèi)容為:

@echo off
set a=1
pause>nul
echo call callchild.bat
call callchild.bat
echo end call
pause>nul
echo %b%
pause>nul

一個(gè)命名為callchild,修改文件類型為bat,用Notepad++打開編輯內(nèi)容為:

 @echo off
 echo %a%
 set b=20
 pause>nul

雙擊執(zhí)行callmain.bat,觀察其運(yùn)行結(jié)果如下圖所示:

批處理命令call和start怎么應(yīng)用

分析結(jié)果:

  應(yīng)用示例中,在main.bat中定義了變量a,值為1;在child.bat中定義了變量b,值為20。

  main.bat首先執(zhí)行call child.bat,然后child.bat將執(zhí)行echo %a%,現(xiàn)在能正常顯示1。

  call完之后,main.bat將執(zhí)行echo %b%,也能正常顯示20。

  那么,如果將call改為start,待child.bat執(zhí)行完再關(guān)閉之后,main.bat繼續(xù)echo %b%,將無(wú)法顯示變量b的值,而僅相當(dāng)于執(zhí)行echo命令,執(zhí)行結(jié)果為:ECHO處于關(guān)閉狀態(tài)。

  call的時(shí)候,他們擁有同一個(gè)殼cmd.exe,在同一個(gè)進(jìn)程當(dāng)中,所以他們的變量是互通的。

  start的時(shí)候,他們擁有兩個(gè)殼cmd.exe,但child.bat可以看成是main.bat的子進(jìn)程,子進(jìn)程可以讀取父進(jìn)程中的變量(即a的值)。

總結(jié)

一是調(diào)用范圍不同:

call主要用來(lái)進(jìn)行批處理的內(nèi)部調(diào)用,如call:pend 和一些dos命令的調(diào)用如callsettest=2,但也可以調(diào)用其他可執(zhí)行文件,而start則不能進(jìn)行內(nèi)部調(diào)用,但其可以執(zhí)行基本上所有的外部程序,還可以執(zhí)行shell,如打開文件夾start"""%WINDIR%",安裝網(wǎng)絡(luò)打印機(jī)start"""\\IP\Printer"等等。

二是調(diào)用方式不同:

call是嚴(yán)格意義上而言的調(diào)用,在call另一個(gè)批處理時(shí)是在同一窗體進(jìn)程里執(zhí)行,而start則是執(zhí)行,所以在執(zhí)行另外一個(gè)批處理時(shí)是在不同的窗體進(jìn)程里進(jìn)行,也就是說(shuō)在新開啟的進(jìn)程里執(zhí)行,雖然start可以加入b參數(shù),但其結(jié)果卻完全不同。如我們使用callsettest=2 和 start/bsettest=2 看似執(zhí)行的結(jié)果相同,但是我們發(fā)現(xiàn)后者有兩個(gè)進(jìn)程,而且在窗體里要執(zhí)行兩次exit才能退出,所以當(dāng)我們使用start來(lái)執(zhí)行一個(gè)批處理后最好在被調(diào)用的批處理中也加一個(gè)exit,否則無(wú)法退出被調(diào)用的批處理的dos窗體,但是使用call調(diào)用時(shí)如果在被調(diào)用的批處理中存在exit則會(huì)直接結(jié)束原始和被調(diào)用的批處理程序,這是一個(gè)非常嚴(yán)重的問(wèn)題。建議在被調(diào)用的批處理中使用goto:eof來(lái)取代exit。

三是調(diào)用結(jié)果不同:

call調(diào)用不僅可以把參數(shù)或變量傳給被調(diào)用的批處理,而且被調(diào)用的批處理也可以設(shè)置參數(shù)或變量以便回傳,而start只能把參數(shù)或變量傳給被調(diào)用的批處理,卻不能回傳參數(shù)或變量,這一點(diǎn)實(shí)際上是第二點(diǎn)的延伸。另外,我們還必須注意一點(diǎn):使用call調(diào)用其他批處理時(shí),在被調(diào)用的批處理中若我們使用goto命令的時(shí)候,建議要使用與原批處理中不同的標(biāo)簽名來(lái)跳轉(zhuǎn),否則可能會(huì)跳轉(zhuǎn)到原批處理中而不能保證完整的執(zhí)行被調(diào)用批處理中的所有語(yǔ)句。

感謝各位的閱讀,以上就是“批處理命令call和start怎么應(yīng)用”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)批處理命令call和start怎么應(yīng)用這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI