最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

批處理中處理特殊字符的幾種方法小結(jié)

 更新時(shí)間:2024年02月21日 09:32:06   作者:namejm  
特殊字符的處理一直是困擾新手的一大難題,本文主要介紹了批處理中處理特殊字符的幾種方法小結(jié),比如>、>>、<、<<、|、||、&、&&、^、%,感興趣的可以了解一下

特殊字符的處理一直是困擾新手的一大難題,就算是老手,也不敢保證能對(duì)各種場(chǎng)合中的特殊字符應(yīng)付自如,現(xiàn)在給出處理各種特殊字符的方法,供各位參考。

何謂特殊字符?一般而言,我們把已經(jīng)在cmd中賦予了各種功能的符號(hào)稱為特殊字符,比如>、>>、<、<<、|、||、&、&&、^、%,另外,在處理文件路徑的時(shí)候,空格也可以算作特殊字符。

很多人都知道,要正確處理路徑中的空格,需要用引號(hào)把路徑括起來(lái),比如:md "c:\test abc\123"。實(shí)際上,只要文件路徑中含有特殊字符,則引號(hào)對(duì)是必須的。

可能還有些人知道,要輸出百分號(hào)本身,需要在它之前再添加一個(gè)百分號(hào),比如,要顯示 %abc% 這個(gè)字符串,應(yīng)該寫成 echo %%abc%%。當(dāng)我們要輸出>、<、|之類的特殊符號(hào)的時(shí)候,大多數(shù)人就開(kāi)始絞盡腦汁了。

我們要請(qǐng)出轉(zhuǎn)義字符^,它能幫我們應(yīng)付絕大多數(shù)的特殊字符。例如,我們要顯示>,echo ^>即可;要顯示|,echo ^|即可,也就是說(shuō),在每個(gè)特殊字符前加上轉(zhuǎn)義字符^,就可以對(duì)特殊字符進(jìn)行原樣輸出了。這次,你會(huì)原樣輸出 aueou>|&a^ueo 之類的字符串了嗎?

轉(zhuǎn)義字符^也不能包打天下:當(dāng)需要輸出的是已知的一串或多行字符串的時(shí)候,確實(shí)可以在每個(gè)特殊字符前添加^來(lái)原樣輸出,可是,如果特殊字符的位置不確定,或是我們需要從某個(gè)文本中原樣讀出一串或多行可能含有特殊字符的未知字符串的時(shí)候,我們還能用插入轉(zhuǎn)義符號(hào)^的辦法嗎?這顯然是行不通的。

或許你已經(jīng)意識(shí)到,就算是對(duì)含有特殊符號(hào)的路徑用引號(hào)對(duì)括起來(lái)以保證處理它的時(shí)候不至出錯(cuò),但是,當(dāng)要用echo語(yǔ)句顯示這個(gè)路徑的時(shí)候,引號(hào)對(duì)還是會(huì)顯示出來(lái),這個(gè)多余的引號(hào)對(duì)并不是我們需要的,有時(shí)候甚至是我們無(wú)法容忍的。

轉(zhuǎn)義字符^無(wú)用武之地,引號(hào)對(duì)也行不通,難道我們就這樣徹底絕望了嗎?

這次,該for語(yǔ)句隆重出場(chǎng)了。

先看示例:

@echo off
for /f "delims=" %%i in (test.txt) do (
    set "str=%%i"
    setlocal enabledelayedexpansion
    echo.!str!
    endlocal
)
pause

test.txt內(nèi)容如下(已經(jīng)囊括了特殊字符):

aoueoa & aeo"83
aeouoaeA3ua^|!:>
><||a6^$2oueo
%ae!aoue

在這里,我動(dòng)用了各種手段以保證特殊字符能夠原樣顯示:

① 用 "delims=" 避免取到的字符串從空格處被截?cái)啵?br />② 用 set "str=%%i" 這樣的引號(hào)對(duì)寫法保證把字符串原樣賦予變量 str ;
③ 在適當(dāng)?shù)奈恢瞄_(kāi)啟變量延遲并在合適的地方終止變量延遲,以保證能原樣顯示變量 str 的值。在這一點(diǎn)上,很多人,包括很多熟練使用 setlocal enabledelayedexpansion 語(yǔ)句的人,都會(huì)忽略一些技術(shù)細(xì)節(jié),從而不能100%原樣顯示變量 str 的值:我發(fā)現(xiàn),絕大多數(shù)的批處理老鳥(niǎo),都喜歡在@echo off和for語(yǔ)句之間使用 setlocal enabledelayedexpansion 語(yǔ)句,這是個(gè)非常不好的習(xí)慣——如果變量的值中含有半角感嘆號(hào)的話,感嘆號(hào)將被直接拋棄!正確的做法是:在for語(yǔ)句內(nèi)部而不是外部開(kāi)啟變量延遲,并在合適的地方用endlocal語(yǔ)句終止延遲——endlocal一定要添加上,這是個(gè)好習(xí)慣,否則,當(dāng) setlocal enabledelayedexpansion 被執(zhí)行32次之后,將會(huì)報(bào)錯(cuò),從而引發(fā)后續(xù)處理錯(cuò)誤。

當(dāng)然,就算我動(dòng)用了這么多手段,也不能保證能處理文本中的所有特殊情況:當(dāng)行首為分號(hào)的時(shí)候、當(dāng)存在空行的時(shí)候……

如果要處理所有的特殊情況,請(qǐng)使用如下代碼:

@echo off
cd.>output.txt
for /f "delims=" %%i in ('findstr /n .* test.txt') do (
        set "var=%%i"
        setlocal enabledelayedexpansion
        set var=!var:*:=!
        (echo.!var!)>>output.txt
        endlocal
)
start output.txt

到此這篇關(guān)于批處理中處理特殊字符的幾種方法小結(jié)的文章就介紹到這了,更多相關(guān)批處理處理特殊字符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

荣昌县| 南郑县| 诸城市| 张北县| 长岛县| 阳朔县| 绵竹市| 汝南县| 漳州市| 漯河市| 如东县| 平陆县| 泾川县| 孝昌县| 呼和浩特市| 上饶县| 肇源县| 措美县| 远安县| 博野县| 黔江区| 化德县| 灵山县| 讷河市| 汶川县| 海安县| 成都市| 九江县| 聂荣县| 友谊县| 安陆市| 兴仁县| 陵川县| 铜陵市| 云安县| 商洛市| 江安县| 称多县| 阿拉善盟| 宁乡县| 哈密市|