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

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

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 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

无法重现你的问题,测试环境: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>
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

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


第二次输入就变成我开始说的那样了,我很纳闷。
如附件2.jpg
麻烦帮我讲解一下好么?

TOP

迷惑

有没有哪味达人可以为我讲解一下这个与处理机制么?至少推荐些自己看的资料也好啊!

TOP

这个应该是不遵循命令语法而产生的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)
1

评分人数

命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

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

那么其中的逗号起了什么作用?为什么两次同样的输入结果会不一样?

TOP

旧题重提

拜托群里的达人不吝赐教,我知道这个问题肯定你们都知道,只是讲解起来费力气,如果是在麻烦给个连接也好。我自己找不到这方面材料,毕竟跟批处理的语法有很大出入。不管是不是自己钻牛角尖,没事找事,问题出现了就要解决,什么问题都有个合理的说法的,程序就是这么逻辑的东西,肯定是有原因的。希望达人帮一下忙,多谢!
Still with wax

TOP

这个应该是不遵循命令语法而产生的Bug


没什么原因,就是bug。如果你还要问为什么是这样的bug,你应该考虑去问微软。。。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 8楼 的帖子

哦,那就无法解释了?那么说这个帖子改结了?
Still with wax

TOP

这个问题因为带有一定的随机性
所以基本上可以确认是内存访问越界了
关键在于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已经完全被不规则的字符串给乱了方寸
天的白色影子

TOP

返回列表