一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - bat - 批處理中字符串分割實現代碼

批處理中字符串分割實現代碼

2021-10-08 00:57lianhuayu420 bat

這篇文章主要介紹了批處理中字符串分割實現代碼,需要的朋友可以參考下

批處理 字符串分割 實例

使用for命令可以對字符串進行分段處理。

分割字符串

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@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環境變量。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@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這個目錄:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@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的文件處理方式:

方案一:

?
1
2
3
4
5
@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.

?
1
2
3
4
5
6
7
8
9
10
@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

有個老兄給了個更完整的(用到了延遲變量):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@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

還有這樣的:

?
1
2
3
4
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:

?
1
2
3
4
5
6
7
8
9
10
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

以上就是批處理中字符串分割實現代碼的詳細內容,更多關于批處理字符串分割的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.51cto.com/langlichong/1851961

延伸 · 閱讀

精彩推薦
  • bat批處理重命名系列案例代碼

    批處理重命名系列案例代碼

    這篇文章主要介紹了批處理重命名系列案例代碼,需要的朋友可以參考下...

    張戈10372021-10-07
  • bat讓bat批處理以管理員權限運行的實現方法

    讓bat批處理以管理員權限運行的實現方法

    這篇文章主要介紹了讓bat批處理以管理員權限運行的實現方法,需要的朋友可以參考下...

    bat教程網6962021-10-08
  • batbat實現一分鐘清除系統中所有垃圾文件

    bat實現一分鐘清除系統中所有垃圾文件

      在桌面上點鼠標右鍵,選擇新建一個“記事本”,把下面的字復制進去,點“另存為”,把文件名定為“清除系統垃圾.bat”就完成,記住后綴名一定要...

    批處理之家10592021-11-14
  • batWindows批處理更改當前工作路徑的BAT

    Windows批處理更改當前工作路徑的BAT

    最近項目上需要獲取文件夾下所有文件信息,因為文件夾是在server上,所以想用批處理bat來獲取該路徑下所有文件信息,然后通過任務計劃管理去每天自動...

    腳本之家12122021-10-07
  • bat變量延遲詳解 call setlocal

    變量延遲詳解 call setlocal

    變量延遲在for語句中起著至關重要的作用,不只是在for語句中,在其他的復合語句中,它也在幕后默默地工作著,為了突出它的重要性,本節內容在單獨的...

    腳本之家5742021-10-08
  • batWindows下用bat命令行方式更改IE代理服務器設置方法

    Windows下用bat命令行方式更改IE代理服務器設置方法

    批處理(Batch),也稱為批處理腳本。顧名思義,批處理就是對某對象進行批量的處理,批處理文件的擴展名為bat,下面通過本文給大家分享Windows下用bat命令...

    大蘿卜空心的6202021-10-06
  • bat使用 windows bat 腳本命令一鍵啟動MySQL服務的方法

    使用 windows bat 腳本命令一鍵啟動MySQL服務的方法

    這篇文章主要介紹了使用 windows bat 腳本命令 一鍵啟動MySQL服務的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的...

    明金同學14752021-10-07
  • batbat過濾任意字符

    bat過濾任意字符

    早在寫 bat的一個小游戲猜數字的時候我就研究過這個問題 如何在bat里面實現 對輸入的任意字符進行過濾 當時使用的幾種方法如下 ...

    allyesno11802021-12-26
主站蜘蛛池模板: 视频在线观看高清免费 | 2021国产麻豆剧传媒剧情 | 特色特色大片在线 | www.av在线视频 | 处女摘花视频 | 99r在线观看 | 富士av105| 国产午夜精品久久理论片小说 | 黑人巨大和日本娇小中出 | 火影忍者小南裸羞羞漫画 | 日本欧美强乱视频在线 | 99er在线观看| 18韩国美女vip视频7 | 99久久精品免费看国产一区二区 | 5555kkkk香蕉在线观看 | 免费理伦片在线观看全网站 | 西西人体大胆77777视频 | 成人福利网站含羞草 | 欧美一区二区三区成人看不卡 | 国产精品欧美亚洲韩国日本 | 国产色拍 | 亚洲精品欧洲久久婷婷99 | 91精品国产品国语在线不卡 | 免费亚洲视频在线观看 | 日本久久影视 | free嫩白的12sex性自由 | 久久婷婷五月综合色丁香花 | 99在线观看视频免费 | 99久久er这里只有精品17 | 羞羞一区二区三区四区片 | 国产精品成人自拍 | 91麻豆精品 | 亚洲精品视频免费在线观看 | 日产乱码卡1卡2卡三卡四在线 | 久久精品AV一区二区无码 | bl超h 高h 污肉快穿np | 精品国产免费一区二区三区 | 五月天婷婷网亚洲综合在线 | 91外围| www91在线观看 | 色视频亚洲 |