在 Windows 批處理檔案中,以下內容將用于提取%1除最后 4 個字符之外的所有字符:
set foo=%1
set x=%foo:~,-4%
但這行不通:
set x=%1:~,-4%
為什么是這樣?
uj5u.com熱心網友回復:
Windows 命令處理器cmd.exe僅支持使用環境變數(和動態變數)進行字串替換,而不支持使用批處理檔案引數(或使用回圈變數)。
foo是一個環境變數,其值通過使用立即擴展%foo%和延遲擴展來參考!foo!。如set /?在命令提示符視窗中運行時的幫助輸出所述,環境變數支持字串替換。Windows 命令處理器cmd.exe支持對命令列中任何地方的環境(和動態)變數擴展進行字串替換。
有關更多詳細資訊,請參閱Windows 命令解釋器 (CMD.EXE) 如何決議腳本?
有關環境變數和動態變數之間差異的解釋,請閱讀CMD 中動態環境變數和正常環境變數之間的差異的長篇回答。
%1參考傳遞給批處理檔案的引數。call /?在命令提示符視窗中運行的幫助輸出解釋了如何在批處理檔案中參考引數以及 Windows 命令處理器支持哪些修飾符。字串替換不被支持cmd.exe的引數字串。
為了完整起見,運行時的幫助輸出for /?解釋了如何在回圈體內參考回圈變數以及哪些修飾符可用(與引數參考相同)。回圈變數不支持字串替換。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312630.html
