非常好的for 教程, 當(dāng)時(shí)我就是看這個(gè)學(xué)習(xí)for 的
更新時(shí)間:2008年05月29日 23:16:15 作者:
批處理for命令詳解
FOR這條命令基本上都被用來處理文本,但還有其他一些好用的功能!
看看他的基本格式(這里我引用的是批處理中的格式,直接在命令行只需要一個(gè)%號)
通過上面的學(xué)習(xí),我們發(fā)現(xiàn)for /f會默認(rèn)以每一行來作為一個(gè)元素,但是如果我們還想把每一行再分解更小的內(nèi)容,該怎么辦呢?不用擔(dān)心,for命令還為我們提供了更詳細(xì)的參數(shù),使我們將每一行分為更小的元素成為可能。
它們就是:delims和tokens
delims 用來告訴for每一行應(yīng)該拿什么作為分隔符,默認(rèn)的分隔符是空格和tab鍵
比如,還是上面的文件,我們執(zhí)行下面的命令:
for /f "delims= " %%i in (a.txt) do echo %%i
顯示的結(jié)果是:
第1行第1列
第2行第1列
第3行第1列
為什么是這樣的呢。因?yàn)檫@里有了delims這個(gè)參數(shù),=后面有一個(gè)空格,意思是再將每個(gè)元素以空格分割,默認(rèn)是只取分割之后的第一個(gè)元素。
執(zhí)行過程是:
將第一個(gè)元素“第1行第1列 第1行第2列 第1行第3列”分成三個(gè)元素:“第1行第1列” “第1行第2列” “第1行第3列”,它默認(rèn)只取第一個(gè),即“第1行第1列”,然后執(zhí)行do后面的命令,依次類推。
但是這樣還是有局限的,如果我們想要每一行的第二列元素,那又如何呢?
這時(shí)候,tokens跳出來說,我能做到。
它的作用就是當(dāng)你通過delims將每一行分為更小的元素時(shí),由它來控制要取哪一個(gè)或哪幾個(gè)。
還是上面的例子,執(zhí)行如下命令:
for /f "tokens=2 delims= " %%i in (a.txt) do echo %%i
執(zhí)行結(jié)果:
第1行第2列
第2行第2列
第3行第2列
如果要顯示第三列,那就換成tokens=3。
同時(shí)tokens支持通配符*,以及限定范圍。
如果要顯示第二列和第三列,則換成tokens=2,3或tokens=2-3,如果還有更多的則為:tokens=2-10之類的。
此時(shí)的命令為:
for /f "tokens=2,3 delims= " %%i in (a.txt) do echo %%i %%j
怎么多出一個(gè)%%j?
這是因?yàn)槟愕膖okens后面要取每一行的兩列,用%%i來替換第二列,用%%j來替換第三列。
并且必須是按照英文字母順序排列的,%%j不能換成%%k,因?yàn)閕后面是j
執(zhí)行結(jié)果為:
第1行第2列 第1行第3列
第2行第2列 第2行第3列
第3行第2列 第3行第3列
對以通配符*,就是把這一行全部或者這一行的剩余部分當(dāng)作一個(gè)元素了。
比如:
for /f "tokens=* delims= " %%i in (a.txt) do echo %%i
執(zhí)行結(jié)果為:
第1行第1列 第1行第2列 第1行第3列
第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列
其實(shí)就跟for /f %%i in (a.txt) do echo %%i的執(zhí)行結(jié)果是一樣的。
再如:
for /f "tokens=2,* delims= " %%i in (a.txt) do echo %%i %%j
執(zhí)行結(jié)果為:
第1行第2列 第1行第3列
第2行第2列 第2行第3列
第3行第2列 第3行第3列
用%%i代替第二列,用%%j代替剩余的所有
最后還有skip合eol,這倆個(gè)簡單,skip就是要忽略文件的前多少行,而eol用來指定當(dāng)一行以什么符號開始時(shí),就忽略它。
比如:
for /f "skip=2 tokens=*" %%i in (a.txt) do echo %%i
結(jié)果為:
第3行第1列 第3行第2列 第3行第3列
用skip來告訴for跳過前兩行。
如果不加tokens=*的話,執(zhí)行結(jié)果為:
第3行第1列
不知道怎么回事。
再如,當(dāng)a.txt內(nèi)容變成:
.第1行第1列 第1行第2列 第1行第3列
.第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列
執(zhí)行for /f "eol=. tokens=*" %%i in (a.txt) do echo %%i結(jié)果是:
第3行第1列 第3行第2列 第3行第3列
用eol來告訴for忽略以“.”開頭的行。
同樣也必須加tokens=*,否則只會顯示“第3行第1列
相關(guān)文章
windows 批處理bat連接本地mysql 創(chuàng)建制定數(shù)據(jù) 并執(zhí)行sql文件
這篇文章主要介紹了windows 批處理bat連接本地mysql 創(chuàng)建制定數(shù)據(jù) 并執(zhí)行sql文件,需要的朋友可以參考下2021-03-03計(jì)算機(jī)名DNS網(wǎng)關(guān)IP(大家可以用來學(xué)習(xí))
生成自動(dòng)配置計(jì)算機(jī)名,DNS,網(wǎng)關(guān),IP腳本,IPX內(nèi)部網(wǎng)絡(luò)號2009-05-05