bat 常見指令初探

1. bat中 /w 是什麼意思

加了/w ,就是等待它完成後再進行下一步的操作。
系統的幫助文件裏說是“啓動應用程序並等候它結束”

2. pause, exit 

pause 等待任一輸入結束指令;

exit [:digital] 直接退出或等待xx秒後退出; 

3. 

一、call命令總結

【1】call命令簡介

  學過彙編或C的朋友,肯定都知道call指令表示什麼意思。其實,在這裏它的意思也是一樣的。在批處理腳本中,call命令用來從一個批處理腳本中調用另一個批處理腳本。

  語法: call [ [Drive:] [Path] FileName [BatchParameters]] [:label [arguments]]

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

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

  調用另一個批處理程序,並且不終止父批處理程序(如果不用call而直接調用別的批處理文件,那麼執行完那個批處理文件後將無法返回當前文件並執行當前文件的後續命令)。   

  call 命令接受用作跳轉目標的標籤。如果在腳本或批處理文件外使用call,它將不會在命令行起作用。

可以很清晰的看到,call調用類似於函數調用的執行邏輯:call2相當於執行主函數,在其執行過程中,需要調用到call1函數,當call1執行結束後,call2主函數再繼續執行本身的命令,直至整個過程結束

【3】call命令與goto命令的區別

  call命令的應用示例2中,我們看到了call命令對跳轉標籤的調用,注意調用時必須在標籤名前加冒號,而goto是直接跟標籤名。

  關於goto命令不懂的可以參見同系列隨筆《批處理命令——goto 和 :》

  同上例,我們再看看goto的執行效果:新建兩個文本文件,一個命名爲call5,修改文件的類型爲bat,用Notepad++打開編輯內容爲:

refer to https://www.cnblogs.com/Braveliu/p/5078283.html

二、start命令總結

【1】start命令簡介

  start命令比較複雜。查看其幫助文檔的步驟如下:

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

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

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

 

【3】start命令與call命令的區別

 分析結果:

  應用示例中,在main.bat中定義了變量a,值爲1;在child.bat中定義了變量b,值爲20。

  main.bat首先執行call child.bat,然後child.bat將執行echo %a%,現在能正常顯示1。

  call完之後,main.bat將執行echo %b%,也能正常顯示20。

  那麼,如果將call改爲start,待child.bat執行完再關閉之後,main.bat繼續echo %b%,將無法顯示變量b的值,而僅相當於執行echo命令,執行結果爲:ECHO處於關閉狀態。

  call的時候,他們擁有同一個殼cmd.exe,在同一個進程當中,所以他們的變量是互通的。

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

  總結結論:

  對於start,概括兩句話:“不同進程不能傳值”,“相同進程單向傳值,老子傳兒子,非兒子傳老子”。

  對於call,“同一進程,變量互通”。

  另外,可以從以下幾方面理解start與call命令的區別:

  一是調用範圍不同:call主要用來進行批處理的內部調用,如call :pend 和一些dos命令的調用如call set test=2,但也可以調用其他可執行文件,而start則不能進行內部調用,但其可以執行基本上所有的外部程序,還可以執行shell,如打開文件夾start "" "%WINDIR%",安裝網絡打印機start "" "\\IP\Printer"等等。

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

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

 

https://blog.csdn.net/stpeace/article/details/9040831

Blog 2:

我們先來看start, 其實start就是啓動,我以前經常用matlab中的system來啓動.exe文件,下面我們用start來啓動.exe, .bat文件內容如下:

@ echo off
start calc
start calc
start calc
      結果,連續啓動了三個計算器。
      另外,start也可以用來打開一個文件夾,如:

@ echo off
md 1
start 1
       當然,start也可以打開某一文件,如:
@ echo off
echo hello world > 1.txt
start 1.txt
       我發現, start可以可開word文件(當然,你的電腦需要有word軟件),可見,start就相當於雙擊文件。


       pause的作用很簡單,就是暫停執行,如:

@ echo off
pause
start calc
pause
start calc
pause
start calc
pause


        接下來,我們看看goto
@ echo off
goto label
dir
:label
md 1
      在這裏,dir沒有執行, 跟C語言中的goto和棋相似啊,只是:符號在label之前而已。下面,我們寫一個有趣的goto:
@ echo off
:labelx
goto labely
 
:labely
dir
goto labelx


      最後,我們來看看rem(remark)的用法,其實rem就是一個註釋,主要是使看.bat文件命令的人閱讀方便,如下:

@ echo off
rem 開始
rem echo 開始
echo 開始
      需要注意的是:在用rem的時候,要將echo設爲off的狀態,否則,該命令雖然被註釋,系統不會執行,但仍然會回顯(當然啦,你也可以用@)。而且,在用rem註釋的時候,rem必須另外單獨佔一行,和c++中的註釋//不一樣。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章