Board logo

标题: [文本处理] [分享]批处理FOR /F中Delims定义多个分隔符的顺序 [打印本页]

作者: mxxcgzxxx    时间: 2011-6-11 23:00     标题: [分享]批处理FOR /F中Delims定义多个分隔符的顺序

在学习cjiabing 的《批处理FOR /F 中的Delims和Tokens总结》一文后,
从《批处理FOR /F 中的Delims和Tokens总结》一文中只谈到了如何定义多个分隔符
相关链接中也提到了如果有空格与其他分隔符同时出现时要放在最后
参考:批处理:FOR的参数/F之delims详解下(原创)

首先:Delims的默认分隔符是TAB和空格
如果进行了定义那么就取消了TAB与空格的分隔能力如:
  1. @echo off
  2. for /f "delims=+" %%1 in (1.txt) do echo %%1
  3. pause>nul
复制代码
就只能用+号分隔了,如果要定义多个分隔符就使用"delims=+-*!:"方式可以同时定义+-*!:为分隔符,
^&|()都是可以正常定义的,但"%<>这几个就比较特殊是不能用一般的方法来定义的
问题也就出现在这,如果还要空格同时定义呢?从上边可以知道要放在最后也就是"delims=+-*!: "
否则就会出错
  1. @echo off
  2. for /f "delims= +-*!:" %%1 in (1.txt) do echo %%1
  3. pause>nul
复制代码
上面的代码中将空格放在了第一位,执行时就出错了:后面的定义成为了语法错误!
那么绕了这么多我想说什么?
还有一个TAB呢?
是不是也是这样呢?
经过测试我发现TAB出现时,它也必须在空格前
也就是"delims=+-*!:[TAB][空格]"否则也是会出错的!
  1. @echo off
  2. for /f "delims=+-*!:[此处为TAB] " %%1 in (1.txt) do echo %%1
  3. pause>nul
复制代码
只有这样写代码才是正确的,
也就是说Delims在没有设置的情况下应该是"delims=[TAB][空格]",而这两个位置是不可倒置的!
有趣的是TAB虽然和空格一样是默认分格符却没有空格的特权,
在与其他分隔符在一起时是并列关系,放哪都没问题的
在进行定义多个分隔符时的标准顺序为"delims=[通用字符(包含[TAB])][空格]"
至于“全角空格”并不是默认的分隔符,所以也只能当做普通符号进行定义
而引号等特殊符号就要特别点了:参考 《[讨论]批处理for命令的参数和扩展特性》
希望能对大家有所帮助。本人测试环境XP
测试文本如下:[attach]3942[/attach]
作者: mxxcgzxxx    时间: 2011-6-11 23:27

发现刚才的一些写法有误马上订正
作者: applba    时间: 2011-6-12 07:32

只需要记住一点,空格总是放在最后。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2