
批處理for語句分割字符串當字段數目比較多時如何獲取各字段最后由 pcl_test 于 -8-4 16:55我現在有一個字符串 假設就是123 456 789以空格為分隔符 用for提取會有3個tokens分別是123 456 789我現在要把這三個數據寫到變量里很容易實現 用自帶的%%i %%j就ok如果是tokens數目未知的話 用%%i %%j這樣的方法去寫就不好實現了更麻煩的是要是tokens超過52就無法處理了于是我寫了一大堆 處理tokens未知的情況我是想循環執行 每次執行提取一個tokens代碼如下:
- @echo off
- setlocal enabledelayedexpansion
- call :a 123 456 789
- echo !str1_1!
- echo !str1_2!
- echo !str1_3!
- pause
- :a
- set str1=%~1&set i1=1
- ::==計tokens數==
- for /l %%i in (0,1,8191) do (
- if !str1:~%%i,1!== (
- if not !str1:~%%i,2!== (
- if not !str1:~%%i,2!== set /a i1+=1
- )
- )
- )
- ::==計數完成==
- echo on
- setlocal disabledelayedexpansion
- ::==按tokens讀入數據==
- :tknloop1
- set i=1
- for /f tokens=%i% delims= %%j in (!str1!) do (
- set str1_!i!=%%j
- pause
- )
- set /a i+=1
- if not !i!==!i1! goto tknloop1
- ::==讀入數據結束==
- goto :eof
nclick="copycode($('code0'));">復制代碼
問題就出在讀入數據的地方那個tokens=%i% 我嘗試用!i!替換%i% 還有把循環改成for /l然后用%%a代替最后結果用%i%的時候因為預處理機制 %i%是不會改變的 但是另外兩個都直接閃退了 說此時不應有!i! delims= 壇友們有什么好的解決方法?