标题: [文本处理] 批处理for语句分割字符串当字段数目比较多时如何获取各字段 [打印本页]
作者: ht河豚 时间: 2016-8-4 14:27 标题: 批处理for语句分割字符串当字段数目比较多时如何获取各字段
本帖最后由 pcl_test 于 2016-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
复制代码
问题就出在读入数据的地方
那个tokens=%i% 我尝试用!i!替换%i% 还有把循环改成for /l然后用%%a代替
最后结果用%i%的时候因为预处理机制 %i%是不会改变的 但是另外两个都直接闪退了 说
"此时不应有!i! delims= "
坛友们有什么好的解决方法?
作者: codegay 时间: 2016-8-4 15:23
用python来做。
作者: pcl_test 时间: 2016-8-4 16:12
- @echo off
- setlocal enabledelayedexpansion
- for /l %%a in (1 1 100) do set "str=!str!%%a "
- for %%a in (%str:~,-1%) do set/an+=1&set "#!n!=%%a"
- echo;#34=!#34!
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |