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

[文本处理] [分享]批处理FOR /F中Delims定义多个分隔符的顺序

[复制链接]
发表于 2011-6-11 23:00:32 | 显示全部楼层 |阅读模式
在学习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
测试文本如下:

评分

参与人数 1PB +2 收起 理由
zm900612 + 2 感谢分享

查看全部评分

 楼主| 发表于 2011-6-11 23:27:08 | 显示全部楼层
发现刚才的一些写法有误马上订正
发表于 2011-6-12 07:32:57 | 显示全部楼层
只需要记住一点,空格总是放在最后。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 01:29 , Processed in 0.021479 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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