批处理命令 / 延迟环境变量扩展
1、變量擴展
? ? ? ? 當寫一個 bat 腳本時,解釋器會讀取命令行完整指令,若解釋器發現指令里面有變量時,需要對變量進行替換,那么識別變量的方法就是用“%”將變量括起來。替換之后,再進行指令的匹配操作,最后執行命令。
? ? ? ? 整體過程為:
? ? ? ? (1)讀取完整指令。
? ? ? ? (2)對變量進行替換。
? ? ? ? (3)匹配指令。
? ? ? ? 上述的第2步就是變量擴展步驟,也就是解釋器識別變量的步驟。
栗子:
@echo offset var=50 echo %var%變量擴展完之后,實際顯示的命令為
echo 50?
2、延遲環境變量擴展
? ? ? ? ?上述操作對于 echo 等其他單行指令是有效的,但是對于嵌套指令來說就有問題,如下栗所示:
@echo offfor %%i in (1,1,3) do ( set var=%%i echo %var% )結果如下所示:
? ? ? ?原因是 Bat 解釋器將整個 for 語句當做一條完整的指令,進行變量擴展時,會將 “set var=%%i” 變為 “set var=”,因為 for 語句之前,i 變量并沒有賦值,所示只能給 var 賦值為空。最后的 “echo %var%” 就變為 “echo? ?”,那么只能顯示 echo 的開關狀態了。
? ? ? ?為了解決上述問題,Bat 增加了延時環境變量擴展的功能,該功能的作用就是延時變量擴展,先將 for 語句中各個指令執行一遍,再進行變量擴展,從而實現了代碼結果的正常化。
? ? ? ?增加延時環境變量的指令為:
setlocal enabledelayedexpansion……endlocal? ? ? ?兩條指令之間的命令中,變量用 “!” 包起來來表示。
?
(SAW:Game Over!)
總結
以上是生活随笔為你收集整理的批处理命令 / 延迟环境变量扩展的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 批处理命令 / rd 和 del
- 下一篇: Linux / offsetof 和 c