批處理命令call、start、goto的使用
1、call命令
CALL從一個批處理程序調用另一個批處理程序,并且不終止父批處理程序。call命令主要有2種用法,一種是調用其他批處理程序(*.bat,*.exe,*.cmd,*.COM),目前常用的是*.exe文件和*.bat文件;另一種是CALL :label arguments
C:\Users\Administrator>help call 從批處理程序調用另一個批處理程序。 CALL [drive:][path]filename [batch-parameters] batch-parameters 指定批處理程序所需的命令行信息。 如果命令擴展被啟用,CALL 會如下改變: CALL 命令現(xiàn)在將卷標當作 CALL 的目標接受。語法是: CALL:label arguments 一個新的批文件上下文由指定的參數(shù)所創(chuàng)建,控制在卷標被指定后傳遞到語句。您必須通過達到批腳本文件末兩次來 "exit" 兩次。第一次讀到文件末時,控制會回到 CALL 語句的緊后面。第二次會退出批腳本。鍵入GOTO /?,參看 GOTO :EOF 擴展的描述,此描述允許您從一個批腳本返回。 另外,批腳本文本參數(shù)參照(%0、%1、等等)已如下改變: 批腳本里的 %* 指出所有的參數(shù)(如 %1 %2 %3 %4 %5 ...) 批參數(shù)(%n)的替代已被增強。您可以使用以下語法: %~1 - 刪除引號("),擴展 %1 %~f1 - 將 %1 擴展到一個完全合格的路徑名 %~d1 - 僅將 %1 擴展到一個驅動器號 %~p1 - 僅將 %1 擴展到一個路徑 %~n1 - 僅將 %1 擴展到一個文件名 %~x1 - 僅將 %1 擴展到一個文件擴展名 %~s1 - 擴展的路徑只含有短名 %~a1 - 將 %1 擴展到文件屬性 %~t1 - 將 %1 擴展到文件的日期/時間 %~z1 - 將 %1 擴展到文件的大小 %~$PATH:1 - 查找列在 PATH 環(huán)境變量的目錄,并將 %1 擴展到找到的第一個完全合格的名稱。如果 環(huán)境變量名未被定義,或者沒有找到文件, 此修改符會擴展到空字符串 可以組合修改符來取得多重結果: %~dp1 - 只將 %1 擴展到驅動器號和路徑 %~nx1 - 只將 %1 擴展到文件名和擴展名 %~dp$PATH:1 - 在列在 PATH 環(huán)境變量中的目錄里查找 %1, 并擴展到找到的第一個文件的驅動器號和路徑。 %~ftza1 - 將 %1 擴展到類似 DIR 的輸出行。 在上面的例子中,%1 和 PATH 可以被其他有效數(shù)值替換。 %~ 語法被一個有效參數(shù)號碼終止。%~ 修定符不能跟 %* 使用
1.1調用批處理
命令格式CALL [drive:][path]filename [batch-parameters]
創(chuàng)建文件test.bat 調用文件call.bat
@echo off set a=環(huán)境變量 call call.bat hi hello pause exit /b 0
::call.bat echo %1 echo %2 echo %a%
運行結果如下:
注意:
1、只在test.bat中使用命令@echo off,call.bat中也沒有回顯命令;
2、在test.bat中設置環(huán)境變量,call.bat中可使用該變量
1.2調用目標標簽
注意:
1、調用標簽時需要“:”
2、調用標簽后繼續(xù)處理后面命令
實例一
@echo off call :interCall hi hello echo 下一步 pause exit /b 0 :intercall echo %1 echo %2
運行結果:
實例二
@echo off call :interCall echo 下一步 :intercall echo hi echo hello PAUSE exit /b 0
2、調用call 和不用call 的區(qū)別
1、使用call 不終止父處理進程,不用call 調用批處理后,父處理進程終止,不再處理后續(xù)命令
rem test.bat @echo off set a=環(huán)境變量 call call.bat hi hello echo 下一步 pause exit /b 0
rem call.bat echo %1 echo %2 echo %a% pause
2.2去掉call call.bat hi hello中的call運行結果如下:
3、goto 命令
幫助文檔如下
C:\Users\Administrator>help goto 將 cmd.exe 定向到批處理程序中帶標簽的行。 GOTO label label 指定批處理程序中用作標簽的文字字符串。 標簽必須單獨一行,并且以冒號打頭。如果命令擴展被啟用,GOTO 會如下改變: GOTO 命令現(xiàn)在接受目標標簽 :EOF,這個標簽將控制轉移到當前批腳本文件的結尾。不定義就退出批腳本文件,這是一個容易的辦法。有關能使該功能有用的 CALL 命令的擴展描述,請鍵入CALL /?。
3.1 goto 后面不需要":",直接加label
3.2 goto 跳至指定label后,不會處理被跳過的命令語句
@echo off goto interCall echo 下一步 :intercall echo hi echo hello PAUSE exit /b 0
運行結果:并沒有處理“echo 下一步”該語句
4、start類似于創(chuàng)建一個線程
C:\Users\Administrator>help start 啟動一個單獨的窗口運行指定的程序或命令。 START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL] [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B] [command/program] [parameters] "title" 在窗口標題欄中顯示的標題。 path 啟動目錄。 B 啟動應用程序,但不創(chuàng)建新窗口。應用程序已忽略 ^C 處理。 除非應用程序啟用 ^C 處理,否則 ^Break 是唯一可以中斷 該應用程序的方式。 I 新的環(huán)境將是傳遞給 cmd.exe 的原始環(huán)境,而不是當前環(huán)境。 MIN 以最小化方式啟動窗口。 MAX 以最大化方式啟動窗口。 SEPARATE 在單獨的內存空間中啟動 16 位 Windows 程序。 SHARED 在共享內存空間中啟動 16 位 Windows 程序。 LOW 在 IDLE 優(yōu)先級類中啟動應用程序。 NORMAL 在 NORMAL 優(yōu)先級類中啟動應用程序。 HIGH 在 HIGH 優(yōu)先級類中啟動應用程序。 REALTIME 在 REALTIME 優(yōu)先級類中啟動應用程序。 ABOVENORMAL 在 ABOVENORMAL 優(yōu)先級類中啟動應用程序。 BELOWNORMAL 在 BELOWNORMAL 優(yōu)先級類中啟動應用程序。 NODE 將首選非一致性內存結構 (NUMA) 節(jié)點指定為十進制整數(shù)。 AFFINITY 將處理器關聯(lián)掩碼指定為十六進制數(shù)字。進程被限制在這些 處理器上運行。 當 /AFFINITY 和 /NODE 結合時,會對關聯(lián)掩碼進行不同的解釋。 指定關聯(lián)掩碼,正如 NUMA 節(jié)點的處理器掩碼正確移動到零位 起始位置一樣。進程被限制在指定關聯(lián)掩碼和 NUMA 節(jié)點之間的 那些通用處理器上運行。如果沒有通用處理器,則進程被限制在 指定的 NUMA 節(jié)點上運行。 WAIT 啟動應用程序并等待它終止。 command/program 如果它是內部 cmd 命令或批文件,則該命令處理器是使用 cmd.exe 的 /K 開關運行的。這表示運行該命令之后,該窗口 將仍然存在。 如果它不是內部 cmd 命令或批文件,則它就是一個程序,并將 作為一個窗口化應用程序或控制臺應用程序運行。 parameters 這些是傳遞給 command/program 的參數(shù)。 注意: 在 64 位平臺上不支持 SEPARATE 和 SHARED 選項。 通過指定 /NODE,可按照利用 NUMA 系統(tǒng)中的內存區(qū)域的方式創(chuàng)建進程。例如,可以創(chuàng)建兩個完全通過共享內存互相通信的進程以共享相同的首選 NUMA 節(jié)點,從而最大限度地減少內存延遲。如有可能,它們即會分配來自相同 NUMA 節(jié)點的內存,并且會在指定節(jié)點之外的處理器上自由運行。 啟動 /NODE 1 application1.exe 啟動 /NODE 1 application2.exe 這兩個進程可被進一步限制在相同 NUMA 節(jié)點內的指定處理器上運行。在以下示例中, application1 在節(jié)點的兩個低順序處理器上運行,而 application2在該節(jié)點的其后兩個處理器上運行。該示例假定指定節(jié)點至少具有四個邏輯處理器。請注意,節(jié)點號可更改為該計算機的任何有效節(jié)點號,而無需更改關聯(lián)掩碼。 啟動 /NODE 1 /AFFINITY 0x3 application1.exe 啟動 /NODE 1 /AFFINITY 0xc application2.exe 如果命令擴展被啟用,通過命令行或 START 命令的外部命令調用會如下改變: 將文件名作為命令鍵入,非可執(zhí)行文件可以通過文件關聯(lián)調用。 (例如,WORD.DOC 會調用跟 .DOC 文件擴展名關聯(lián)的應用程序)。 關于如何從命令腳本內部創(chuàng)建這些關聯(lián),請參閱 ASSOC 和FTYPE 命令。 執(zhí)行的應用程序是 32-位 GUI 應用程序時,CMD.EXE 不等應用程序終止就返回命令提示符。如果在命令腳本內執(zhí)行,該新行為則不會發(fā)生。 如果執(zhí)行的命令行的第一個符號是不帶擴展名或路徑修飾符的字符串 "CMD","CMD" 會被 COMSPEC 變量的數(shù)值所替換。這防止從當前目錄提取 CMD.EXE。 如果執(zhí)行的命令行的第一個符號沒有擴展名,CMD.EXE 會使用PATHEXT 環(huán)境變量的數(shù)值來決定要以什么順序尋找哪些擴展名。PATHEXT 變量的默認值是: .COM;.EXE;.BAT;.CMD 請注意,該語法跟 PATH 變量的一樣,分號隔開不同的元素。 查找可執(zhí)行文件時,如果沒有相配的擴展名,看一看該名稱是否與目錄名相配。如果確實如此,START 會在那個路徑上調用Explorer。如果從命令行執(zhí)行,則等同于對那個路徑作 CD /D。
4.1 可以和 第2段“調用call 和不用call 的區(qū)別” 代碼作對比
@echo off set a=環(huán)境變量 start call.bat hi hello echo 下一步 pause exit /b 0
call.bat內容如下
rem call.bat echo %1 echo %2 echo %a% pause
運行結果
到此這篇關于批處理命令call、start、goto的使用的文章就介紹到這了,更多相關批處理call、start、goto內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
修改Windows Server 2008 R2 的3389遠程端口的Bat批處理代碼
這篇文章主要介紹了修改Windows Server 2008 R2 的3389遠程端口的Bat批處理代碼,需要的朋友可以參考下2017-06-06批處理bat將txt文本第一列內容相同的行的最后一列的數(shù)字相加
這篇文章主要介紹了批處理bat將txt文本第一列內容相同的行的最后一列的數(shù)字相加,需要的朋友可以參考下2021-09-09