批處理中處理特殊字符的幾種方法小結(jié)
特殊字符的處理一直是困擾新手的一大難題,就算是老手,也不敢保證能對各種場合中的特殊字符應(yīng)付自如,現(xiàn)在給出處理各種特殊字符的方法,供各位參考。
何謂特殊字符?一般而言,我們把已經(jīng)在cmd中賦予了各種功能的符號稱為特殊字符,比如>、>>、<、<<、|、||、&、&&、^、%,另外,在處理文件路徑的時候,空格也可以算作特殊字符。
很多人都知道,要正確處理路徑中的空格,需要用引號把路徑括起來,比如:md "c:\test abc\123"。實(shí)際上,只要文件路徑中含有特殊字符,則引號對是必須的。
可能還有些人知道,要輸出百分號本身,需要在它之前再添加一個百分號,比如,要顯示 %abc% 這個字符串,應(yīng)該寫成 echo %%abc%%。當(dāng)我們要輸出>、<、|之類的特殊符號的時候,大多數(shù)人就開始絞盡腦汁了。
我們要請出轉(zhuǎn)義字符^,它能幫我們應(yīng)付絕大多數(shù)的特殊字符。例如,我們要顯示>,echo ^>即可;要顯示|,echo ^|即可,也就是說,在每個特殊字符前加上轉(zhuǎn)義字符^,就可以對特殊字符進(jìn)行原樣輸出了。這次,你會原樣輸出 aueou>|&a^ueo 之類的字符串了嗎?
轉(zhuǎn)義字符^也不能包打天下:當(dāng)需要輸出的是已知的一串或多行字符串的時候,確實(shí)可以在每個特殊字符前添加^來原樣輸出,可是,如果特殊字符的位置不確定,或是我們需要從某個文本中原樣讀出一串或多行可能含有特殊字符的未知字符串的時候,我們還能用插入轉(zhuǎn)義符號^的辦法嗎?這顯然是行不通的。
或許你已經(jīng)意識到,就算是對含有特殊符號的路徑用引號對括起來以保證處理它的時候不至出錯,但是,當(dāng)要用echo語句顯示這個路徑的時候,引號對還是會顯示出來,這個多余的引號對并不是我們需要的,有時候甚至是我們無法容忍的。
轉(zhuǎn)義字符^無用武之地,引號對也行不通,難道我們就這樣徹底絕望了嗎?
這次,該for語句隆重出場了。
先看示例:
@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
在這里,我動用了各種手段以保證特殊字符能夠原樣顯示:
① 用 "delims=" 避免取到的字符串從空格處被截斷;
② 用 set "str=%%i" 這樣的引號對寫法保證把字符串原樣賦予變量 str ;
③ 在適當(dāng)?shù)奈恢瞄_啟變量延遲并在合適的地方終止變量延遲,以保證能原樣顯示變量 str 的值。在這一點(diǎn)上,很多人,包括很多熟練使用 setlocal enabledelayedexpansion 語句的人,都會忽略一些技術(shù)細(xì)節(jié),從而不能100%原樣顯示變量 str 的值:我發(fā)現(xiàn),絕大多數(shù)的批處理老鳥,都喜歡在@echo off和for語句之間使用 setlocal enabledelayedexpansion 語句,這是個非常不好的習(xí)慣——如果變量的值中含有半角感嘆號的話,感嘆號將被直接拋棄!正確的做法是:在for語句內(nèi)部而不是外部開啟變量延遲,并在合適的地方用endlocal語句終止延遲——endlocal一定要添加上,這是個好習(xí)慣,否則,當(dāng) setlocal enabledelayedexpansion 被執(zhí)行32次之后,將會報錯,從而引發(fā)后續(xù)處理錯誤。
當(dāng)然,就算我動用了這么多手段,也不能保證能處理文本中的所有特殊情況:當(dāng)行首為分號的時候、當(dā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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用winrar和ftp命令實(shí)現(xiàn)自動備份文件并自動上傳到指定的ftp服務(wù)器
這篇文章主要介紹了用winrar和ftp命令實(shí)現(xiàn)自動備份文件并自動上傳到指定的ftp服務(wù)器的方法,需要的朋友可以參考下2014-05-05Windows使用bat批處理實(shí)現(xiàn)守護(hù)進(jìn)程腳本分享
這篇文章主要介紹了Windows使用bat批處理實(shí)現(xiàn)守護(hù)進(jìn)程腳本分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-07-07