start與call的區別

2021-10-07 16:30:15 字數 1067 閱讀 2624

1.call是從批處理程式呼叫另乙個批處理程式,並且不終止父批處理程式(如果不用call而直接呼叫別的批處理檔案,那麼執行完那個批處理檔案後將無法返回當前檔案並執行當前檔案的後續命令);而start是啟動乙個單獨的視窗執行指定的程式或命令。

2.call命令能夠呼叫標籤,與goto命令的區別是:採用 call:label的形式(goto採用的形式是goto label,沒有冒號),並且採用call呼叫完標籤之後,會繼續順序執行後續命令,而goto則是直接跳轉至標籤進行執行,並順序執行標籤後的內容;start不能夠呼叫標籤。

3.呼叫範圍不同:call主要用來進行批處理的內部呼叫,如call :pend 和一些dos命令的呼叫如call set test=2,但也可以呼叫其他可執行檔案,而start則不能進行內部呼叫,但其可以執行基本上所有的外部程式,還可以執行shell,如開啟資料夾start "" "%windir%",安裝網路印表機start "" "\\ip\printer"等等。

4.呼叫方式不同:call是嚴格意義上而言的呼叫,在call另乙個批處理時是在同一窗體程序裡執行,而start則是執行,所以在執行另外乙個批處理時是在不同的窗體程序裡進行,也就是說在新開啟的程序裡執行,雖然start可以加入b引數,但其結果卻完全不同。如我們使用call set test=2 和 start /b set test=2 看似執行的結果相同,但是我們發現後者有兩個程序,而且在窗體裡要執行兩次exit才能退出,所以當我們使用start來執行乙個批處理後最好在被呼叫的批處理中也加乙個exit,否則無法退出被呼叫的批處理的dos窗體,但是使用call呼叫時如果在被呼叫的批處理中存在exit則會直接結束原始和被呼叫的批處理程式,這是乙個非常嚴重的問題。建議在被呼叫的批處理中使用goto :eof來取代exit。

5.呼叫結果不同:call呼叫不僅可以把引數或變數傳給被呼叫的批處理,而且被呼叫的批處理也可以設定引數或變數以便回傳,而start只能把引數或變數傳給被呼叫的批處理,卻不能回傳引數或變數,這一點實際上是第二點的延伸。另外,我們還必須注意一點:使用call呼叫其他批處理時,在被呼叫的批處理中若我們使用goto命令的時候,建議要使用與原批處理中不同的標籤名來跳轉,否則可能會跳轉到原批處理中而不能保證完整的執行被呼叫批處理中的所有語句。

apply 與call 的區別

function call 方法 function.call thisobj arg1 arg2 argn 它們各自的定義 call 呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。例如 b.call a,args1,args2 即a物件呼叫b物件的方法。它們的共同之處 都 可以用來代替另乙個物件...

apply 與call 的區別

function call 方法 function.call thisobj arg1 arg2 argn 它們各自的定義 call 呼叫乙個物件的乙個方法,用另乙個物件替換當前物件。例如 b.call a,args1,args2 即a物件呼叫b物件的方法。它們的共同之處 都 可以用來代替另乙個物件...

apply 與call 的區別

call 方法 function.call thisobj arg1 arg2 argn 它們各自的定義 call 呼叫乙個物件的乙個方法,用另乙個物件替換當前物件。例如 b.call a,args1,args2 即a物件呼叫b物件的方法。它們的共同之處 都 可以用來代替另乙個物件呼叫乙個方法,將乙...