[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理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
代码如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. call :a "123 456 789"
  4. echo !str1_1!
  5. echo !str1_2!
  6. echo !str1_3!
  7. pause
  8. :a
  9. set "str1=%~1"&set i1=1
  10. ::==计tokens数==
  11. for /l %%i in (0,1,8191) do (
  12. if "!str1:~%%i,1!"==" " (
  13.   if not "!str1:~%%i,2!"==" " (
  14.    if not "!str1:~%%i,2!"=="  " set /a i1+=1
  15.   )
  16. )
  17. )
  18. ::==计数完成==
  19. echo on
  20. setlocal disabledelayedexpansion
  21. ::==按tokens读入数据==
  22. :tknloop1
  23. set i=1
  24. for /f "tokens=%i% delims= " %%j in ("!str1!") do (
  25.   set str1_!i!=%%j
  26.   pause
  27. )
  28. set /a i+=1
  29. if not !i!==!i1! goto tknloop1
  30. ::==读入数据结束==
  31. goto :eof
复制代码
问题就出在读入数据的地方
那个tokens=%i% 我尝试用!i!替换%i% 还有把循环改成for /l然后用%%a代替
最后结果用%i%的时候因为预处理机制 %i%是不会改变的 但是另外两个都直接闪退了 说
"此时不应有!i! delims= "
坛友们有什么好的解决方法?
1

评分人数

    • pcl_test: 发帖前先使用论坛搜索PB -4

用python来做。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%a in (1 1 100) do set "str=!str!%%a "
  4. for %%a in (%str:~,-1%) do set/an+=1&set "#!n!=%%a"
  5. echo;#34=!#34!
  6. pause
复制代码

TOP

返回列表