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

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

假如有一个文件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。提取第二行会出现问题。
请问还有什么方法吗?

  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
复制代码

TOP

以[逗号]为切割符,切割一个字符串,成为数组的话,在powershell中是没有这个问题的,
  1. $变量 = '1,2,3,4,5' -split ','
复制代码
powershell中:
第一行切割完,结果是 1 2 3
第二行切割完,结果是 1 空 空
这样的话,你判断字符串是否是空字符串即可。
  1. if  ($变量[2] -eq "")
复制代码
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

本帖最后由 lifei259 于 2013-12-11 20:19 编辑
  1. 1,2,3,4,5,6,7,8,9
  2. 1,,,6,6,7,8,9
复制代码
你下一行用的不英文的【,】是中文【,】。
怎么能处理。开玩笑吧

TOP

to 4楼:

1 我还真没注意楼主的第二行数据竟然含有中,英文逗号.
2 对于上述情况又怎么办呢?
答:用这个powershell代码即可
  1. $变量 = ('1,2,,4,5,6,7,8' -split ',') -split ','
复制代码
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 4# lifei259


    不好意思,我输入的时候没注意看,都是英文的

TOP

回复 3# PowerShell


    谢谢斑竹,我试试看

TOP

返回列表