1. 程式人生 > >【bat/cmd】腳本開發

【bat/cmd】腳本開發

管理 current spa 早期 為什麽 編程 鏈接 try use

0. 開篇

bat/cmd 均是window操作系統下,兩者都是通過文本方式編輯,創建以及查看。均是命令的集合。bat與cmd有什麽區別呢 ?

1) cmd文件允許使用的命令比bat多,但是只有在windows2000以上的系統中才能運行

2) bat 文件允許使用的命令比cmd少,但是沒有系統上的限制

3) cmd文件 “Windows NT命令腳本”,bat 文件“MS DOS批處理文件”

4) 文件擴展名不同,cmd文件是".cmd",bat文件擴展名是“.bat”

批處理腳本的一些功能

  • 可以讀取用戶的輸入,以便進一步處理。
  • 有控制結構:for, if, whileswitch更好的自動化和腳本。
  • 支持高級功能,如函數和數組。
  • 支持正則表達式。
  • 可以包含其他編程代碼,如Perl。

批處理腳本的一些用途

  • 為不同的目的設置服務器。
  • 自動管理活動和日誌,如刪除不需要的文件或日誌文件。
  • 自動將應用程序從一個環境部署到另一個環境。
  • 立即在各種機器上安裝程序。

1. 基礎批處理命令

命令1:echo

命令2:md/mkdir

獲取當前路徑

@echo off
echo current disk: %~d0
echo current disk and path: %~dp0
echo current file: %~f0
echo short current directry path: %~sdp0
echo %cd%
pause

判斷變量是否為空

很多時候,我們需要檢查某個變量的值是否為空,以便做後續處理。
  對於這個問題,很多人會毫不猶豫地選擇 if "%str%"=="" …… 的句式,在早期的批處理中,還可以看到這樣的語句:if [%str%]==[],有人把這兩種寫法稱為“防空字符”。
  可是,這樣做真的能在各種復雜的情況下判斷某個變量的值是否為空嗎?
  答案是否定的。
  先來看 if [%str%]==[],當%str%為空值的時候,它無疑能成功地捕獲到這一情況,但是,如果%str%中含有特殊字符,比如>、&之類,這條語句就會報錯。
  為了兼容這幾個特殊字符,人們絞盡腦汁,想到了 if "%str%"=="" 語句,於是,>、&、|之類的特殊字符也能順利通過驗證了,這是防空字符的一大進步。
  但是,這條語句也不是完美的,因為有一個特殊字符它完全沒辦法處理!
  這個特殊字符是什麽呢?
  它就是雙引號"本身!
  我們執行一下如下代碼:

  1. @echo off
  2. set str="
  3. if "%str%"=="" (echo yes) else echo no
  4. pause

  CMD.EXE報錯了:命令語法錯誤。
  原來,上面這條if語句執行的是 if """=="" ……,引號起到分組字符串的作用,而引號對是就近匹配的:第一個引號和第二個引號配成一對,第三個引號和第四個引號配成一對,第五個引號和第六個引號配成一對……,這條if語句最終的執行的是 if "==……,但是引號始終要作為分組字符來使用的,而單個的引號沒有找到下一個可匹配的引號,所以就出現了語法錯誤。
  當把 %str% 的值改為兩個引號的時候,上面這段代碼的執行結果居然顯示為no,想想這是為什麽。
  if "%str%"==""……能兼容大部分特殊字符,但是偏偏不能兼容引號本身,那麽,判斷某個變量的值是否為空,是不是就沒有更好的辦法了呢?
  答案是肯定的,那就是:用 if defined str 語句來判斷變量值是否為空。
  請執行以下代碼:

    1. @echo off
    2. :Main
    3. cls
    4. set str=
    5. set /p "str=請輸入任意字符,或直接回車:"
    6. if defined str (
    7. echo 變量 str 的值不為空
    8. ) else echo 變量 str 為空值
    9. pause
    10. goto Main

參考鏈接:

https://my.oschina.net/superkangning/blog/528881

https://www.yiibai.com/batch_script/

https://www.zybuluo.com/yangfch3/note/338252

【bat/cmd】腳本開發