windows bat系列9:for處理案例三 單行按指定分隔符分割
1. 需求
假設有一行字串,由幾個字串組成,每個字串間用分隔符delimiter連線,我們要對各個子串進行操作。這就涉及到將單行字串按分隔符分割。如PATH環境變數就是這樣,每個字串就是一個路徑:
C:\Users\Administrator.WIN7-1609051925>echo %path%
C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;D:\software\apache-tomcat-9.0.8\bin;D:\software\apache-tomcat-9.0.8\lib;C:\Program Files\7-Zip
2. 程式碼
@echo off
Rem close echo
Rem chane active page
chcp 437 >nul
Rem delay expansion
setlocal enabledelayedexpansion
Rem set parameters
set TESTLIST=D:\myself\windows_script\bat_out;D:\myself\windows_script\bat_test;D:\myself\windows_script\testnull;
set TMPLIST=%TESTLIST%
Rem print title
echo=
echo=
echo=
echo ---------------------------%date% %time:~0,8%---------------------------
set /a NUM = 1
:loop
for /f "tokens=1* delims=;" %%a in ("%TMPLIST%") do (
Rem set local parameters
echo #!NUM! is %%a
set /a NUM = NUM + 1
Rem recursion
set TMPLIST=%%b
)
if defined TMPLIST goto :loop
Rem
echo=
echo=
echo=
endlocal
pause
3. 程式碼解析
a. 待分割的變數TESTLIST最後一個欄位末尾也需要加上“;”分隔符,否則將少分割一個字串;
b. 分割採用迭代演算法,由於for /f "tokens=1* delims=;" %%a in ("%TMPLIST%") do (…)預設是指定分隔符按行分割字串,而我們總共只有一行字串,因而我們把分割後的字串重新存入臨時變數:
set TMPLIST=%%b
後續通過DOS的goto再次迭代分割,最終達到目的;
c. 自定義NUM變數表示分割出來的字串的序號(從1開始);
d. %date% %time:~0,8%是擷取系統日期顯示出來。
4. 測試結果
結果表面:分割正確。
有個小bug:顯示日期是出現??亂碼,那個位置應該是顯示星期幾。此問題筆者不想再改了,請讀者自行研究。提示:需要修改windows系統的語言集與位置等。
相關文章
- windows bat系列7:for處理案例二 產生等差序列WindowsBAT
- windows bat系列11:for處理案例四 去掉字串中的空格WindowsBAT字串
- windows 處理bat連線本地mysqlWindowsBATMySql
- 10 Windows批處理之呼叫例程和bat檔案WindowsBAT
- 批處理檔案 bat 後臺執行BAT
- bat 批處理字串操作BAT字串
- shell字串按照指定分隔符切割字串
- bat批處理常用指令碼BAT指令碼
- [20211011]變態的windows批處理9.txtWindows
- Windows使用bat指令碼指定jdk版本啟動jar包WindowsBAT指令碼JDKJAR
- BAT批處理判斷服務是否正常執行(批處理命令綜合應用)BAT
- 如何檢測Windows服務停止後自動啟動?自動執行.bat批處理檔案?WindowsBAT
- 三、實戰系列問題處理集中營
- Windows自動使用管理員許可權執行bat批處理,手動選擇啟停服務WindowsBAT
- 簡單的方法就能教你實現將大量的影片批次進行分割的處理
- DM 原始碼閱讀系列文章(三)資料同步處理單元介紹原始碼
- 智慧合約語言 Solidity 教程系列9 - 錯誤處理Solid
- 影像處理案例03
- 分割槽表truncate慢處理
- 怎樣處理重新命名系列案例程式碼
- Linux系列開坑記(三)-流處理器sedLinux
- windows bat系列10:批量設定&取消共享目錄WindowsBAT
- bat批處理轉換成exe檔案BAT
- windows使用bat檔案 執行java程式WindowsBATJava
- TensorFlow進行簡單的影像處理
- Windows Ping的結果顯示每次ping的時間的bat批處理指令碼WindowsBAT指令碼
- SQL最佳化 | MySQL問題處理案例分享三則MySql
- 04 Windows批處理中的條件執行Windows
- windows bat系列8:echo詳解與DOS輸出空行WindowsBAT
- Node.js 系列 - 搭建路由 & 處理表單提交Node.js路由
- IE安全系列之:中流砥柱(II)—Jscript 9處理淺析JS
- kafka指定key進行分割槽遇到的問題Kafka
- Kettle9:異常處理
- laravel9 錯誤處理Laravel
- 英特爾酷睿 i9-13900K 處理器登頂 PassMark 單執行緒效能榜SSM執行緒
- Android處理按鈕重複點選Android
- windows bat指令碼 後臺執行目標exeWindowsBAT指令碼
- 使用python進行簡單的媒體處理Python