我們都知道CMD中的for命令是執行循環命令的,數據來源可以是一個文件,一個命令的結果或一個字符串,只有這3種來源
如果是一個文件則對這個文件的所有字符串進行循環處理
如果是一個命令結果,那么對這個命令的結果的每一行做循環處理
如果是一個字符串,那么對這個字符串只作一次處理
如:FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
即使使用"Delims=[字符] Tokens=x"的功能也是只是把當前行的進行分割后的某一個項進行傳遞到循環語句中
而不能循環的對一行字符串進行逐個循環,想要實現類似與C#中的string.Split('字符')的功能
最后研究出的方法就是使用goto語句強制循環整個For語句的方法來實現
代碼如下:
@echo off&title 字符串切割 set string=aaa/bbb/ccc :split rem 把要切割字符串按照/符號分割開,並取得分割后的第一個的值 rem 再把分割后的剩下的值重賦予環境變量string,並重新執行for rem 第一次 %string%=aaa/bbb/cc rem 第二次 %string%=bbb/ccc rem 第三次 %string%=ccc rem 第四次 %string%=空,結束goto,退出 for /f "tokens=1,* delims=/" %%i in ("%string%") do ( echo %%i set string=%%j ) if not "%string%"=="" goto split pause
運行結果:
—— 原文發表於2012-3-11 08:57
用原本是循環的for命令來切割字符串,這純屬於奇技淫巧,CMD中批處理的功能很弱,但得益於其語法異常寬松,可以玩出各種花樣
這也是我為什么喜歡腳本語言的很大一部分原因。:)