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

[文本处理] 批处理delims,tokens怎样避免某列的值为空?

[复制链接]
发表于 2013-12-11 12:59:53 | 显示全部楼层 |阅读模式
假如有一个文件test.txt,其内容如下:
1,2,3,4,5,6,7,8,9
1,,,6,6,7,8,9
现在我要以逗号作为分隔符提取第二列的内容
  1. for /f "tokens=2,4 delims=," %%i in (test.txt) do echo %%i %%j
复制代码
执行结果,由于文件中第二行第二列内容为空,输出时会把第四列的6赋值给%%i ,而把第六列的7赋值给%%j,而本来打算第四列输出6
请问怎么避免这个问题?

其实我是想将某一列的数值和一个给定数值作比较大小,如果满足条件执行相应语句。
比如说吧,如果第6列的数大于5就执行command。提取第二行会出现问题。
请问还有什么方法吗?
发表于 2013-12-11 13:44:33 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (test.txt) do (
  3.     set str=%%i
  4.     set str=!str:,=, !
  5.     for /f "tokens=2,4 delims=," %%j in ("!str!") do (
  6.     set sj=%%j&set sk=%%k
  7.     echo,!sj: =! !sk: =!
  8.     )
  9. )
  10. pause
复制代码
发表于 2013-12-11 14:37:46 | 显示全部楼层
以[逗号]为切割符,切割一个字符串,成为数组的话,在powershell中是没有这个问题的,
  1. $变量 = '1,2,3,4,5' -split ','
复制代码
powershell中:
第一行切割完,结果是 1 2 3
第二行切割完,结果是 1 空 空
这样的话,你判断字符串是否是空字符串即可。
  1. if  ($变量[2] -eq "")
复制代码
发表于 2013-12-11 20:08:49 | 显示全部楼层
本帖最后由 lifei259 于 2013-12-11 20:19 编辑
  1. 1,2,3,4,5,6,7,8,9
  2. 1,,,6,6,7,8,9
复制代码
你下一行用的不英文的【,】是中文【,】。
怎么能处理。开玩笑吧
发表于 2013-12-12 12:37:40 | 显示全部楼层
to 4楼:

1 我还真没注意楼主的第二行数据竟然含有中,英文逗号.
2 对于上述情况又怎么办呢?
答:用这个powershell代码即可
  1. $变量 = ('1,2,,4,5,6,7,8' -split ',') -split ','
复制代码
 楼主| 发表于 2013-12-15 01:14:53 | 显示全部楼层
回复 4# lifei259


    不好意思,我输入的时候没注意看,都是英文的
 楼主| 发表于 2013-12-15 01:15:25 | 显示全部楼层
回复 3# PowerShell


    谢谢斑竹,我试试看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 21:28 , Processed in 0.014808 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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