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

[文本处理] 批处理for命令delims不是默认以空格键或跳格键作为分隔符吗?

a.txt
批处理之家 高手汇聚 资料齐全
批处理之家 新手入门的福地 老手晋级的乐园

说明:文本文档a.txt  内容:上面 2 行,每相邻语句开(如:批处理之家与高手汇聚)中间有个空格
---------------------
我想提取以下内容:
批处理之家 高手汇聚
批处理之家 新手入门的福地

code:
@echo off
for /f "delims=            tokens=1,2" %%i in (a.txt) do
echo %%i  %%j >>jieguo.txt
pause

但是结果jieguo.txt却是:
批处理之家 高手汇聚 资料齐全
批处理之家 新手入门的福地 老手晋级的乐园

-------------------
疑问:
delims 不是默认以空格键或跳格键作为字符串的切分字符吗?
那上面的代码为什么没达到预期结果?那里出了错?

我是新手,望高手指出    不胜感谢!

何不先搜索搜索呢?
技术问题请到论坛发帖求助!

TOP

try as below batch script:

@echo off&setlocal enabledelayedexpansion
del jieguo.txt
for /f "tokens=1,2 delims= " %%i in (a.txt) do echo %%i  %%j >>jieguo.txt
pause

[ 本帖最后由 pdanniel66 于 2010-6-22 04:41 编辑 ]

TOP

回复 3楼 的帖子

您的代码确实实现了预期效果  非常感谢!


请问能讲解下原因么    感觉还是有点似懂非懂的

[ 本帖最后由 lovbat 于 2010-6-22 06:01 编辑 ]

TOP

/f这个参数的一般规则是先把tokens放在前面,delims放在后面的。不信你看看其他人写的P你就知道了

TOP

http://www.bathome.net/viewthread.php?tid=7057&highlight=delims
以前我也有跟你一样的疑问

简短来说就是这里的空格cmd认为是delims和tokens的间隔,而没有当成是分割符,采用的是系统默认分割符

[ 本帖最后由 sgaizxt001 于 2010-6-22 08:37 编辑 ]
努力学习,努力挣分

TOP

如果把其中的一句改成 echo "%%i"  "%%j" >>jieguo.txt,会看到结果是:
"批处理之家 高手汇聚 资料齐全"  ""
"批处理之家 新手入门的福地 老手晋级的乐园"  ""

可以看到的是 %%j 是空的,%%i 是整行,这说明没有了分隔符。

由此得到的出错原因是:
    参数之间是用空格分隔的。所以,"delims=            tokens=1,2" 等同于 "tokens=1,2 delims="

正确的代码是:
    "tokens=1,2 delims= "
    或
    "tokens=1,2" (因为默认的分隔符是空格和制表符)

[ 本帖最后由 73yexs4f8qzk 于 2010-6-22 08:49 编辑 ]

TOP

所谓for /f默认delims是以空格等分隔的意思一般是指不指定delims时。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

http://www.bathome.net/viewthread.php?tid=3692&page=1#pid23376
好像是for的一个bug:一般来说,多个相同字符会被当作一个字符(它们不是整体作为分隔符,新手往往问到这个问题)。但如果指定连续多个空格,空格将无法作为分隔符。
补充以前讨论的一个要点:如果分隔符集里面含有空格,空格必须放在最后。
  1. @echo off
  2. for /f "delims=aa" %%a in ("1a2") do echo %%a
  3. rem 下面的“宽空格”是两个空格(也可以更多)
  4. for /f "delims=  " %%a in ("1 2  3") do echo %%a
  5. for /f "tokens=1,2 delims=aa  " %%a in ("1 2a3  4") do echo %%a.%%b.
  6. pause
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 7楼 的帖子

多谢 你的思路很好  加个 “”  ,一下就考到问题在那了  


同时非常感谢各位  下在明白了

TOP

返回列表