找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23778|回复: 2

[文本处理] 批处理for语句分割字符串当字段数目比较多时如何获取各字段

[复制链接]
发表于 2016-8-4 14:27:49 | 显示全部楼层 |阅读模式
本帖最后由 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= "
坛友们有什么好的解决方法?

评分

参与人数 1PB -4 收起 理由
pcl_test -4 发帖前先使用论坛搜索

查看全部评分

发表于 2016-8-4 15:23:01 | 显示全部楼层
用python来做。
发表于 2016-8-4 16:12:06 | 显示全部楼层
  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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 14:10 , Processed in 0.019205 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表