您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關計算機網絡中如何批處理中字符串分割實現代碼,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
批處理 字符串分割 實例
使用for命令可以對字符串進行分段處理。
分割字符串
@echo off ::定義一個以分號作為分隔的字符串 set str=AAA;BBB;CCC;DDD;EEE;FFF ::str的副本 set remain=%str% :loop for /f "tokens=1* delims=;" %%a in ("%remain%") do ( ::輸出第一個分段(令牌) echo %%a rem 將截取剩下的部分賦給變量remain,其實這里可以使用延遲變量開關 set remain=%%b ) ::如果還有剩余,則繼續分割 if defined remain goto :loop pause
主要解釋for語句:
delims=;表示以分號作為分隔符,對remain字符串進行分割處理。
tokens=1*,tokens表示分段的方式,tokens=1*表示第一個分隔符;之前的作為一部分,剩下的(*表示)作為一部分。這兩部分在循環體總可以用%%a表示第一部分,%%b表示第二部分。
批處理 遍歷path環境變量
我們知道path環境變量也是以分號作為分隔符的,批處理中,所以同樣可以用上面的代碼來遍歷path環境變量。
@echo off setlocal enabledelayedexpansion ::定義一個以分號作為分隔的字符串 set str=%path% ::str的副本 set remain=%str% :loop for /f "tokens=1* delims=;" %%a in ("%remain%") do ( ::輸出第一個分段(令牌) echo %%a rem 將截取剩下的部分賦給變量remain,其實這里可以使用延遲變量開關 set remain=%%b ) ::如果還有剩余,則繼續分割 if defined remain goto :loop pause
運行結果:
D:\dev\workspace\MarkdownTools
......
C:\windows\system32
D:\dev\java\jdk1.8.0_91\bin
F:\Program Files\nodejs\node_global
F:\Program Files\Git\bin
D:\dev\apache-maven-3.5.4\bin
......
請按任意鍵繼續. . .
批處理 判斷path環境變量中是否有某個目錄
例如查找系統path環境變量中是否存在D:\dev\workspace\MarkdownTools這個目錄:
@echo off setlocal enabledelayedexpansion ::定義一個以分號作為分隔的字符串 ::set str=AAA;BBB;CCC;DDD;EEE;FFF set str=%path% ::str的副本 set remain=%str% set toFind=D:\dev\workspace\MarkdownTools set isFind=false :loop for /f "tokens=1* delims=;" %%a in ("%remain%") do ( if "%toFind%"=="%%a" ( ::設置標記,以便后續使用 set isFind=true ::找到了就不找了 goto :finded ) rem 將截取剩下的部分賦給變量remain,其實這里可以使用延遲變量開關 set remain=%%b ) ::如果還有剩余,則繼續分割 if defined remain goto :loop :finded echo %isFind% pause
運行結果:
true
請按任意鍵繼續. . .
參考資料
最近有有個小需求需要將shell 腳本的功能挪到windows中,但發現shell中有數組概念,但windows中卻沒有,同時shell中有很多方式處理字符串分割,但bat中就顯得比較雞肋,經過一番查找,終于有了方案(Stack Overflow:http://stackoverflow.com/questions/1707058/how-to-split-a-string-in-a-windows-batch-file):
方案: 通過for循環處理,而處理的方式又可以分兩種,一種是普通for,一種是for的文件處理方式:
方案一:
@echo off & setlocal rem 注意這里的s定義,其值不是使用雙引號引起來的 rem also works for comma-separated lists, e.g. ABC,DEF,GHI,JKL set s=AAA BBB CCC DDD EEE FFF for %%a in (%s%) do echo %%a
方案二:is the best for (most) arbitrary delimiter characters.
@echo off & setlocal set s=AAA BBB CCC DDD EEE FFF set t=%s% :loop for /f "tokens=1*" %%a in ("%t%") do ( echo %%a rem 將截取剩下的部分賦給t,其實這里可以使用延遲變量開關 set t=%%b ) if defined t goto :loop
有個老兄給了個更完整的(用到了延遲變量):
@echo off setlocal ENABLEDELAYEDEXPANSION REM Set a string with an arbitrary number of substrings separated by semi colons set teststring=The;rain;in;spain REM Do something with each substring :stringLOOP REM Stop when the string is empty if "!teststring!" EQU "" goto END for /f "delims=;" %%a in ("!teststring!") do set substring=%%a REM Do something with the substring - REM we just echo it for the purposes of demo echo !substring! REM Now strip off the leading substring :striploop set stripchar=!teststring:~0,1! set teststring=!teststring:~1! if "!teststring!" EQU "" goto stringloop if "!stripchar!" NEQ ";" goto striploop goto stringloop ) :END endlocal
還有這樣的:
set input=AAA BBB CCC DDD EEE FFF set nth=4 for /F "tokens=%nth% delims= " %%a in ("%input%") do set nthstring=%%a echo %nthstring%
其實Powershell里可能有更多的內置函數可以使用:
PS C:\> "AAA BBB CCC DDD EEE FFF".Split()
還有人提出用vbscrip代替bat:
Set objFS = CreateObject("Scripting.FileSystemObject") Set objArgs = WScript.Arguments str1 = objArgs(0) s=Split(str1," ") For i=LBound(s) To UBound(s) WScript.Echo s(i) WScript.Echo s(9) ' get the 10th element Next usage: c:\test> cscript /nologo test.vbs "AAA BBB CCC"
最后來一個bat中的小難點: 變量延遲(自上而下,逐條(簡單語句、復合語句(for、if 語句塊只算一條))執行,而非逐行執行)
變量延遲詳解 call setlocal
關于“計算機網絡中如何批處理中字符串分割實現代碼”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。