国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > BAT > 正文

批處理中的預(yù)處理實(shí)現(xiàn)代碼

2020-06-09 14:17:55
字體:
供稿:網(wǎng)友

轉(zhuǎn)載自 nxhujiee最終編輯 LJ_SunTB批處理中的【預(yù)處理】
━━━━━━━━━━━━━━━━━━━━━━━━━━

如果你對(duì)脫字字符“^”的處理機(jī)制比較熟悉那么可以接著閱讀,否
則請(qǐng)先參考脫字字符的相關(guān)文章。

一、預(yù)處理究竟要做什么?

根據(jù)我的經(jīng)驗(yàn),預(yù)處理要做的是變量值的替換和特殊符號(hào)的處理。究竟先執(zhí)行哪個(gè)操作呢,我認(rèn)為要先進(jìn)行變量值的替換。理由有三:

1、 從邏輯上看

set var=2&echo %var%
類似于這樣的語句,如果說先進(jìn)行特殊符號(hào)處理的話,勢(shì)必要先處理符號(hào)“&”,而“&”是用來連接兩條命令的,這樣一來該行就理所應(yīng)當(dāng)?shù)谋焕斫鉃閮删?,那么我們還要變量延遲干嘛。這里應(yīng)該是
先對(duì)變量var賦值,然后處理特殊符號(hào)“&”。

2、從運(yùn)行結(jié)果看

復(fù)制代碼 代碼如下:

@echo off
set var=^^^>
echo %var%
pause

這句“set var=^^^>”首先也會(huì)被預(yù)處理,預(yù)處理之后var的值為“^>”。
本例的輸出結(jié)果是“>”,因此可以證明系統(tǒng)先將變量的值替換為“^>”然后再處理特殊符號(hào)“^”。

3、從變量替換上看
復(fù)制代碼 代碼如下:

@echo off
set ^&var=hero
echo %&var%
pause

結(jié)果:顯示“hero”
這也說明變量的替換先于特殊符號(hào)的處理。

二、啟動(dòng)了變量延遲之后預(yù)處理又是如何進(jìn)行呢?

我的看法是這樣的:如果語句中存在英文嘆號(hào)“!”則會(huì)被預(yù)處理兩次,其它情況仍然是預(yù)處理一次。由于脫字字符比較特殊,因此在此借助該符號(hào)寫幾個(gè)例子說明一下。

(一)
復(fù)制代碼 代碼如下:

@echo off
echo !^^^^^>
setlocal enabledelayedexpansion
echo !^^^^^>
pause

兩個(gè)echo語句的結(jié)果不同。下面做一下分析:
對(duì)于第一個(gè)echo語句,變量延遲沒有開啟,進(jìn)行預(yù)處理的時(shí)候該句就被預(yù)處理為“echo !^^>”,這也就是輸出的結(jié)果。由此可見預(yù)處理只進(jìn)行了一次。

對(duì)于第二個(gè)echo語句,此時(shí)變量延遲開啟,由于有“!”存在,首先進(jìn)行一次預(yù)處理得到“echo !^^>”,再進(jìn)行一次得到“echo ^>”,結(jié)果也是如此。
之所以沒有輸出嘆號(hào),是因?yàn)殚_啟了變量延遲,嘆號(hào)就變?yōu)榱颂厥夥?hào)。


(二)
復(fù)制代碼 代碼如下:

@echo off
setlocal enabledelayedexpansion
set var=hero
echo !var!
pause

像這里的“echo !var!”不是沒有被預(yù)處理,而是被預(yù)處理了兩次??聪旅娴倪@段代碼就可以理解了。
復(fù)制代碼 代碼如下:

@echo off
setlocal enabledelayedexpansion
set var=hero
echo !var!^^^^^>
pause
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 班戈县| 万荣县| 泸溪县| 巴南区| 沂水县| 夏津县| 中阳县| 大理市| 七台河市| 定西市| 肃南| 锡林浩特市| 新津县| 遂昌县| 安陆市| 犍为县| 平昌县| 连城县| 宽城| 德令哈市| 左云县| 山阴县| 高陵县| 甘孜县| 崇明县| 堆龙德庆县| 木兰县| 延安市| 凤台县| 吉安县| 庆城县| 遵义市| 开封县| 西充县| 大余县| 吴旗县| 尚义县| 舞钢市| 岳阳县| 沙湾县| 南汇区|