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

[文本处理] [已解决]批处理for /f括号中多引号字符串与逗号组合产生的bug

[复制链接]
发表于 2009-3-6 13:28:14 | 显示全部楼层 |阅读模式
for /f %a in ("bbs.bathome.com,","ajf aslf") do echo %a
命令执行后显示(bbs.bathome.com,"),显示内容就是括号里部分,然后另起一行显示系统找不到文件,然后跟一个很奇怪的符号。而下面的命令只是括号里的字符不一样,格式都一样,为什么显示不一样呢?
for /f %a in ("bbs.bathome.com,","bath bathome") do echo %a 显示(bbs.bathome.com,")
还有就是,为什么这两个命令执行以后都会这样显示,第一个为什么不显示第一个引号和最后一个引号里的全部内容呢?我试过把中间的逗号删了的话就可以显示首末引号中间的所有内容。为什么会这样呢,逗号在这里到底起到什么作用导致结果如此?跟FOR /F命令的默认分隔符有关系么?请论坛的朋友帮忙解释下,能详则详,多谢。

[ 本帖最后由 Lumiere 于 2009-8-9 22:56 编辑 ]

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢主动给标题标注[已解决]字样

查看全部评分

发表于 2009-3-6 13:51:38 | 显示全部楼层
无法重现你的问题,测试环境:CMD@XP_SP2_EN_VOL

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Test>for /f %a in ("bbs.bathome.com,","ajf aslf") do echo %a

C:\Test>echo bbs.bathome.com,"
bbs.bathome.com,"

C:\Test>for /f %a in ("bbs.bathome.com,","bath bathome") do echo %a

C:\Test>echo bbs.bathome.com,"
bbs.bathome.com,"

C:\Test>
 楼主| 发表于 2009-3-6 14:03:12 | 显示全部楼层

for /f 命令括号中多字符串、多引号、逗号

补充一点就是,第一次输入------for /f %a in ("bbs.bathome.com,","ajf aslf") do echo %a
显示---bbs.bathome.com,"
如图:附件未命名.jpg


第二次输入就变成我开始说的那样了,我很纳闷。
如附件2.jpg
麻烦帮我讲解一下好么?
 楼主| 发表于 2009-3-13 09:14:00 | 显示全部楼层

迷惑

有没有哪味达人可以为我讲解一下这个与处理机制么?至少推荐些自己看的资料也好啊!
发表于 2009-3-13 11:38:17 | 显示全部楼层
这个应该是不遵循命令语法而产生的Bug
C:\>for /f %a in ("bbs.bathome.com,","ajf aslf") do echo %a
bbs.bathome.com,"

C:\>for /f %a in ("bbs.bathome.com,","ajf aslf") do echo %a
bbs.bathome.com,"

C:\>for /f %a in ("bbs.bathome.com,","ajf aslf") do echo %a
bbs.bathome.com,"
系统找不到文件 _。

C:\>for /f %a in ("bbs.bathome.com,","ajf aslf") do echo %a
bbs.bathome.com,"
系统找不到文件 §。

C:\>for /f %a in ("bbs.bathome.com,","ajf aslf") do echo %a
bbs.bathome.com,"
系统找不到文件 §。

C:\>for /f %a in ("bbs.bathome.com,","ajf aslf") do echo %a
bbs.bathome.com,"
系统找不到文件 §



上面的“下划线”其实是ASCII字符[SYN](22),“§”其实是[NAK](21)

评分

参与人数 1PB +4 收起 理由
Lumiere + 4 多谢帮助

查看全部评分

 楼主| 发表于 2009-3-17 16:11:27 | 显示全部楼层

能不能帮忙讲解一下这个bug

那么其中的逗号起了什么作用?为什么两次同样的输入结果会不一样?
 楼主| 发表于 2009-3-24 15:13:57 | 显示全部楼层

旧题重提

拜托群里的达人不吝赐教,我知道这个问题肯定你们都知道,只是讲解起来费力气,如果是在麻烦给个连接也好。我自己找不到这方面材料,毕竟跟批处理的语法有很大出入。不管是不是自己钻牛角尖,没事找事,问题出现了就要解决,什么问题都有个合理的说法的,程序就是这么逻辑的东西,肯定是有原因的。希望达人帮一下忙,多谢!
发表于 2009-3-24 17:56:06 | 显示全部楼层
这个应该是不遵循命令语法而产生的Bug


没什么原因,就是bug。如果你还要问为什么是这样的bug,你应该考虑去问微软。。。
 楼主| 发表于 2009-3-25 09:14:36 | 显示全部楼层

回复 8楼 的帖子

哦,那就无法解释了?那么说这个帖子改结了?
发表于 2010-4-20 21:36:12 | 显示全部楼层
这个问题因为带有一定的随机性
所以基本上可以确认是内存访问越界了
关键在于for/f的括号中出现了多余的双引号
而不管有多少个双引号
for/f都视图将它作为一个字符串来处理
而for/f字符串内部包含有界定字符串特性的双引号
必然会为程序运行带来很多意想不到的风险
D:\Test>for /f %a in ("abcedfghi " "ajf aslf") do echo %a

D:\Test>echo abcedfghi
abcedfghi
系统找不到文件
f       @ҨҨWS\system32\cmd.exe - echo abcedfghi"。

从上面的内存泄露数据可以看出
for /f已经完全被不规则的字符串给乱了方寸
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 23:45 , Processed in 0.027825 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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