cmd批處理轉義字元的詳細解釋

2021-05-28 01:51:30 字數 936 閱讀 4289

cmd批處理轉義字元%的詳細解釋

在命令列中使用for時不需要雙%,這源於命令直譯器對命令列與批處理的處理方式不同。

1、%是個escape字元,通常將之譯為轉義字元,但也有更形象的譯名脫逸字元、逃逸字元等。也就是說%不僅僅將與其相關的特定字串轉義並替換為特定字串,而且自身也會被「脫逸」。而且類似於c語言中的轉義字元"\",雙%會轉義並脫逸為單%,四%則脫為雙%。

2、for本身是乙個特殊的命令,類似於乙個特化的命令直譯器,因為它的功能實現需要執行多條語句,因此它必須也具有對命令列(特指do後的命令列)分析處理的功能。而command/cmd實現for時自然會借用自身原有的命令列分析模組,因此for具有二級轉義的特性,for中do後的語句被分兩級分析和解釋,第一級在command/cmd讀入並解釋for命令行時,第二級在for讀入並解釋do命令時,它通常會對同一命令列的進行多次解釋。

然後,我們可以注意到,在do中使用命令列引數變數和環境變數時,不需要雙%,那是因為,這些變數在經過第一級轉義後,被替換成特定的不變的字串常量,參與for迴圈的所有執行過程;而替代變數則要求在執行(do後的子命令列中)過程中不斷的動態變化,而這個變化自然仍需要通過脫逸字元來實現,因此使用雙%就是成了必然的選擇。

另外,還需要注意到,在命令列中使用for時不需要雙%,這源於命令直譯器對命令列與批處理的處理方式不同。在早期的dos版本中,%在命令列中不被視為轉義字元,所以不會被轉義和脫逸,所以當時無法在命令列直接引用環境變數。而使用for時,只需要乙個%供for進行轉義和脫逸就夠了。在以後的命令直譯器版本中,加入了命令列轉義的支援(主要是環境變數的支援),但命令列for使用單%的傳統仍然保留了下來。

而 cmd中的變數延遲替換是屬於特殊的情況,但不違背以上的轉義原則,只是for中的環境變數不再是常量了。

在批處理中,直譯器讀入指令碼是脫一層%,執行for時再脫一層%,所以要雙%

而在命令列中,不需要第一步,只需要for脫一層,所以只要單%

批處理中的轉義字元

一般而言,以轉義字元的身份出現。因為在cmd環境中,有些字元具備特殊功能,如 表示重定向,表示管道,表示語句連線 它 們都有特定的功能,如果需要把它們作為字元輸出的話,echo echo 之類的寫法就會出錯 cmd直譯器會 把它們作為具有特殊功能的字元對待,而不會作為普通字元處理,這個時候,就需要對...

CMD批處理延時啟動的幾個方法

批處理延時啟動的幾個方法 方法一 ping 缺點 時間精度為1秒,不夠精確 vb view plain copy echo off ping 127.0.0.1 n 6 nul start gdh.txt 方法二 vbs start wait 缺點 生成臨時檔案 有點 時間精度為0.001秒,精度高...

Oracle特殊字元,轉義字元的處理

plsql中還可以set define off來關閉特殊字元,還可以用show define來檢視有些特殊定義的字元。oracle資料有個字段是儲存url的,內容有特殊字元 如果直接想執行查詢或插入操作的話有問題。如下 update userinfo set pageurl test.php?pag...