![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-11 04:38 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 自己总结关于FOR /F中usebackq的用法 |
| 可打印版本 3,659 / 18 |
| 第1楼 tianlijian | 发表于 2007-03-17 04:37 |
| 初级用户 发帖 45 积分 120 | |
|
自己总结关于FOR /F中usebackq的用法 先声明一下以下文章,是个人查找一些相关资料后自己总结出来的,由于自己刚学dos不久,所以文中的观点并不全正确,希望大家能够希望大家能够不吝赐教。 by-無名氏
先来说一下我cmd的当前目录中放有
看的时候大家注意IN 后面括号中的文字。 首先我们来看看,for中不采用usebackq时的情况。 实验一: 结果:file:ab.txt 实验二: 结果:系统找不到文件 a。 总结:(IN后面的,下同)括号中的文字不加东西(这里的东西指双引号,单引号,还有back quoted。关于back quoted我将在下面说明)时,指的是文件,但文件中不能有空格,否则就会出错。 实验三: 结果:Hello 总结:这里结果是hello表示这里的ECHO应该是当作一个命令来执行的,即把ECHO Hello的结果传给%i 实验四: 结果:ECHO Hello 总结:这个结果的ECHO Hello,表明这里的echo 不是当作dos中的命令来处理,而是当作字符来处理。 实验五: 结果:系统找不到文件 `ECHO。 说明关于这个例子,你也许会认为和第二个相同,如果你仔细看的话会发现有一点不同,这个用的是back quoted。你可以先暂时跳过这个,等看完下面的在回来看这个。 下面看看使用usebackq的效果: 在做下面实验以前先做一些准备工作,首先我把cmd /?中关于usebackq部分拷过来。 specifies that the new semantics are in force, 看到这个帮助,我认为这里讲了usebackq的三种用法,单引号,双引号,back quote.在下面的实验中我会一个一个来讲的。(注意区分单引号和back quote) 实验六: 结果:file:ab.txt 实验七: 结果:系统找不到文件 a。 总结:括号中文字不加东西时,与不使用usebackq的作用是相同(参考实验一,实验二):即都表示的是文件,但文件中不能有空格,否则就会出错。 到了这里也许会有人想,如果我的文件里面有空格该怎么办呢?下面的这个实验,就会帮你解决这个问题。 实验八: 结果:file:a (space) b.txt 总结:当使用usebackq这个关键字之后,双引号中的文字不在代表字符串(参见例四),而且代表文件名了。即使文件中有空格也可以使用。 那么当使用usebackq关键字之后,但又想使用字符串,要该么办,其实这时是用单引号来代表字符串。看下面的实验。 结果:ECHO hello 总结:这个和实验四的结果一样,证明了,单引号里面的是字符串。 实验九: 结果:hello 注意了这里不是单引号,而是back quote,这个结果说明,当使用back quote时里面的是命令。也就相当于不使用usebackq关键字的单引号。当然,如果你可以把ECHO hello其它dos命令,把执行的结果传给%i,如果你输入的不是dos命令,比如abc Hello,cmd会提示你abc不是命令。 [ Last edited by tianlijian on 2007-3-16 at 08:33 PM ] |
|
| 第2楼 tianlijian | 发表于 2007-03-17 04:41 |
| 初级用户 发帖 45 积分 120 | |
|
预留贴,以后将给出一个更简洁的总结
[ Last edited by tianlijian on 2007-3-16 at 05:29 PM ] 附件 usebackq.png (12.75 KiB) |
|
| 第3楼 snk502 | 发表于 2007-03-17 08:06 |
| 新手上路 发帖 1 积分 2 | |
|
谢谢楼主对FOR的细节作出这些详细的总结
我是新手 对FOR语句不明白 看了你的总结令我知道这些细节 再次多谢楼主 |
|
| 第4楼 lxmxn | 发表于 2007-03-17 12:11 |
| 版主 发帖 4,938 积分 11,386 | |
|
总结得不错,加分了先。
兄试试下面这个有趣的命令,看有什么结果: |
|
| 第5楼 tianlijian | 发表于 2007-03-17 16:05 |
| 初级用户 发帖 45 积分 120 | |
|
好像在某些情况下结果是这个
echo hello 还有些情况下结果是这个 echo hello Ť\。不到文件 Ɉ 不明白为什么? [ Last edited by tianlijian on 2007-3-17 at 03:07 AM ] |
|
| 第6楼 tianlijian | 发表于 2007-03-17 16:25 |
| 初级用户 发帖 45 积分 120 | |
|
试了好多次还是不知道为什么,上面两种情况都会出现,第一种好像要多一些。
我开始认为是不是使copy to clipboar进行复制时里面有看不见的字符,但后来觉得也不是这样。 还有一个现象,我发现有时时候copy过去的东西在cmd上点右键后,会直接显示结果,有时候还要按一下回车? |
|
| 第7楼 oilio | 发表于 2007-03-19 01:00 |
| 高级用户 发帖 303 积分 641 | |
|
大家再把得到的那个怪的结果再粘贴到命令行里面看一下,我想这个才是计算机真正想说的。
|
|
| 第8楼 tianlijian | 发表于 2007-03-19 04:11 |
| 初级用户 发帖 45 积分 120 | |
|
还是不明白到底是什么意思?
为什么有时是这个结果,而有时却是另外一个结果? [ Last edited by tianlijian on 2007-3-18 at 03:13 PM ] |
|
| 第9楼 z310394543 | 发表于 2007-10-29 22:51 |
| 初级用户 发帖 23 积分 48 | |
|
为什么我在CMD下的结果都是echo hello?
|
|
| 第10楼 z310394543 | 发表于 2007-10-29 22:59 |
| 初级用户 发帖 23 积分 48 | |
Originally posted by tianlijian at 2007-3-19 04:11 AM: 会得到一个奇怪的结果, |
|
| 第11楼 sglxy | 发表于 2008-01-30 18:41 |
| 中级用户 发帖 87 积分 397 | |
|
佩服楼主的精神。
|
|
| 第12楼 h2thesun | 发表于 2008-03-03 21:00 |
| 初级用户 发帖 14 积分 34 | |
|
总结得不错。版主的例子让人奇怪。
|
|
| 第13楼 sinbao | 发表于 2008-04-03 16:40 |
| 初级用户 发帖 73 积分 184 | |
|
c:\a.bat内容是@echo _____%1 我希望的输出结果是 _____ab cd 然而实际却是 _____'ab |
|
| 第14楼 sinbao | 发表于 2008-04-03 16:42 |
| 初级用户 发帖 73 积分 184 | |
|
改了一下还是不行
输出结果是: 'C:\a.bat" "ab' is not recognized as an internal or external command, operable program or batch file. |
|
| 第15楼 p1509101 | 发表于 2008-04-03 17:02 |
| 中级用户 发帖 103 积分 206 | |
|
呵呵 学到了一点
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |