windows批處理之一:字串處理

regonly1發表於2010-11-26
好久沒有寫技術類的篇目了,這兩天剛剛好有點收穫,記錄一下,以備後忘。
      我們知道,在幾乎所有的程式語言中,都會有關於字串操作的函式。對於字串擷取這種最常用的字串操作,sql中、c中、awk中都提供了substr這個函式,而在shell中,則有一種另外形式的“函式”,${str:pos:len},含義一看就明白,跟substr很相似吧。但是,我們這裡要說的不是程式語言,也不是shell,而是windows下的批處理指令碼。
      Windows的批處理沒有多少的學習過,所以一直都是簡單的一些命令堆砌而已。這兩天經過一番摸索,學到了一些其他的用法,就比如說上面提到的字串擷取,bat就可以這麼處理:
set str=%str:~1,10%
很奇怪的用法,是吧?windows確實夠奇怪的,不僅字串擷取類函式搞得很奇怪,連for迴圈也用的很奇怪,要不是一篇比較好的文章介紹,我還真沒想法學習下去。好了,廢話少說,先解釋一下上面這個命令的含義:
      其實說穿了很簡單,就是擷取字串str中,從二個位置開始的,長度為10的字串。疑?為啥是第二個位置?嘿嘿,是比較奇怪,這個bat的處理跟c語言類似,是從0開始計數的,即0表示第一個位置。
      那麼,如果我要擷取某個位置以後的全部字元呢?可以這樣:
set str=%str:~1%
本質上,跟substr函式一樣,所以說,語言只是工具,關鍵在於有這個思想。只要你瞭解過其他substr的用法,就能聯想到如何將同樣的用法用到這裡來。
      當然,除了擷取字串,還有替換。假如要替換字串中的某些字元為其他字元,該怎麼做呢?
      下面就是新的用法了:
set str=%str:,t=,tmp_%
什麼意思?
      別急,慢慢來。首先,我們從前面的擷取用法已經知道,字串操作的基本用法是,先用前後%引用變數(這個跟shell下的${}真的very的相似啊),然後,以冒號(:)作為操作的開始符,表示我後面就要動手了。接著,如果是一個擷取操作,則需要用~來表明開始要進行字串擷取了。如果是一個替換操作,則指明要替換的字元(在這裡是“,t”),然後用“=”表示後面將要出現替換為的字元(“tmp_”),這樣,一個替換命令就完成了。是不是很簡單?趕快實驗一下吧,所有bat環境都適用哦~~~。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-680419/,如需轉載,請註明出處,否則將追究法律責任。

相關文章