【bat/cmd】腳本開發
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
,while
和switch
更好的自動化和腳本。 - 支持高級功能,如函數和數組。
- 支持正則表達式。
- 可以包含其他編程代碼,如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%"=="" 語句,於是,>、&、|之類的特殊字符也能順利通過驗證了,這是防空字符的一大進步。
但是,這條語句也不是完美的,因為有一個特殊字符它完全沒辦法處理!
這個特殊字符是什麽呢?
它就是雙引號"本身!
我們執行一下如下代碼:
- @echo off
- set str="
- if "%str%"=="" (echo yes) else echo no
- pause
CMD.EXE報錯了:命令語法錯誤。
原來,上面這條if語句執行的是 if """=="" ……,引號起到分組字符串的作用,而引號對是就近匹配的:第一個引號和第二個引號配成一對,第三個引號和第四個引號配成一對,第五個引號和第六個引號配成一對……,這條if語句最終的執行的是 if "==……,但是引號始終要作為分組字符來使用的,而單個的引號沒有找到下一個可匹配的引號,所以就出現了語法錯誤。
當把 %str% 的值改為兩個引號的時候,上面這段代碼的執行結果居然顯示為no,想想這是為什麽。
if "%str%"==""……能兼容大部分特殊字符,但是偏偏不能兼容引號本身,那麽,判斷某個變量的值是否為空,是不是就沒有更好的辦法了呢?
答案是肯定的,那就是:用 if defined str 語句來判斷變量值是否為空。
請執行以下代碼:
- @echo off
- :Main
- cls
- set str=
- set /p "str=請輸入任意字符,或直接回車:"
- if defined str (
- echo 變量 str 的值不為空
- ) else echo 變量 str 為空值
- pause
- goto Main
參考鏈接:
https://my.oschina.net/superkangning/blog/528881
https://www.yiibai.com/batch_script/
https://www.zybuluo.com/yangfch3/note/338252
【bat/cmd】腳本開發