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