|
bagpipe
银牌会员
DOS联盟捡破烂的
积分 1144
发帖 425
注册 2005-10-20 来自 北京
状态 离线
|
『楼 主』:
[已结]为什么变量转义字符%%会只显示一个%
用ECHO命令显示“ %~dpI”问题,为什么编写批处理的时候必须用ECHO %%~dpI语句才能显示出“ %~dpI”这个呢?为什么用回显命令执行的时候只显示一个呢?偶没有查到有关资料,请WILLSORT和无奈何老兄帮忙解决一下,这个先谢谢你们了。
[ Last edited by willsort on 2006-6-8 at 12:34 ]
|
|
2006-2-11 10:55 |
|
|
JonePeng
金牌会员
D◎$ Fαп
积分 4562
发帖 1883
注册 2004-1-19 来自 广东广州
状态 离线
|
『第
2 楼』:
在命令行中就用一个%,批处理中就用两个%。不仅是echo命令,连 for 命令的 %i 在批处理文件中都要写成 %%i。
|
----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
|
|
2006-2-11 15:15 |
|
|
bagpipe
银牌会员
DOS联盟捡破烂的
积分 1144
发帖 425
注册 2005-10-20 来自 北京
状态 离线
|
『第
3 楼』:
我想JonePeng兄弟误会我的意思了,呵呵,批处理中FOR 语句必须要用%%I这样的形式,我还是举个例子比较好,首先要谢谢JonePeng兄弟能够帮助我,下面看例子:
@echo off
echo %~f0
echo %%~f0
这个批处理中第一个ECHO产生的结果是这个批处理文件的完整路径,第二个ECHO显示的是“%~f0”这个字符,我现在就是不明白的是为什么有两个%%,用ECHO显示的时候变成了一个%???
|
|
2006-2-12 08:55 |
|
|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
4 楼』:
───────────────── 版主提示 ─────────────────
为了方便论坛用户浏览和版主管理,请修改该主题的标题,以简要叙述主题的内容或意图
此主题最好发表在“解答室”,因为此主题在分类上更接近疑难问答
───────────────── 版主提示 ─────────────────
Re bagpipe:
你的问题与两个要素有关:
1、%是个ESCAPE字符,通常将之译为转义字符,但也有更形象的译名脱逸字符、逃逸字符等。也就是说%不仅仅将与其相关的特定字符串转义并替换为特定字符串,而且自身也会被“脱逸”。而且类似于C语言中的转义字符"\",双%会转义并脱逸为单%,四%则脱为双%。
2、for本身是一个特殊的命令,类似于一个特化的命令解释器,因为它的功能实现需要执行多条语句,因此它必须也具有对命令行(特指do后的命令行)分析处理的功能。而command/cmd实现for时自然会借用自身原有的命令行分析模块,因此for具有二级转义的特性,for中do后的语句被分两级分析和解释,第一级在command/cmd读入并解释for命令行时,第二级在for读入并解释do命令时,它通常会对同一命令行的进行多次解释。
然后,我们可以注意到,在do中使用命令行参数变量和环境变量时,不需要双%,那是因为,这些变量在经过第一级转义后,被替换成特定的不变的字符串常量,参与for循环的所有执行过程;而替代变量则要求在执行(do后的子命令行中)过程中不断的动态变化,而这个变化自然仍需要通过脱逸字符来实现,因此使用双%就是成了必然的选择。
另外,还需要注意到,在命令行中使用for时不需要双%,这源于命令解释器对命令行与批处理的处理方式不同。在早期的DOS版本中,%在命令行中不被视为转义字符,所以不会被转义和脱逸,所以当时无法在命令行直接引用环境变量。而使用for时,只需要一个%供for进行转义和脱逸就够了。在以后的命令解释器版本中,加入了命令行转义的支持(主要是环境变量的支持),但命令行for使用单%的传统仍然保留了下来。
而 cmd中的变量延迟替换是属于特殊的情况,但不违背以上的转义原则,只是for中的环境变量不再是常量了。
[ Last edited by willsort on 2006-2-12 at 09:57 ]
|
※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|
2006-2-12 09:21 |
|
|
bagpipe
银牌会员
DOS联盟捡破烂的
积分 1144
发帖 425
注册 2005-10-20 来自 北京
状态 离线
|
『第
5 楼』:
谢谢WILLSORT版主的回复,似乎有些明白了,谢谢二位对我的帮助,大家一起努力才是,再次说声谢谢!
|
|
2006-2-12 12:19 |
|
|
jun19841
初级用户
积分 55
发帖 29
注册 2006-4-11 来自 亚洲
状态 离线
|
『第
6 楼』:
哇噻 · ···································
^哈 哈 ^哈 哈 ^哈 哈 ^哈 哈 ^哈 哈 ^哈 哈 ^哈 哈 ^哈 哈 ^哈 哈 ^哈 哈 ^哈 哈 ^哈 哈 ^哈 哈
|
|
2006-6-1 01:19 |
|
|
chineselgs
高级用户
论坛灌水专业户
积分 613
发帖 266
注册 2006-4-19 来自 河南省
状态 离线
|
『第
7 楼』:
楼上的是个疯子啊??
|
饮马恒河畔,剑指天山西,碎叶城揽月,库叶岛赏雪,黑海之滨垂钓,贝尔加湖面张弓;中南半岛访古,东京废墟祭祖!
|
|
2006-6-4 16:25 |
|
|
不得不爱
超级版主
我爱DOS
积分 5310
发帖 2044
注册 2005-9-26 来自 四川南充
状态 离线
|
|
2006-6-6 09:47 |
|
|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
9 楼』:
───────────────── 版务记录 ─────────────────
执行:Will Sort
操作:修改标题 - 偶有个问题,请willsort版主帮忙解决一下,谢谢
说明:原主题作者在通知发出三日后仍未申诉或修改,由版主修改并进行处罚
处罚:扣除因发表该主题而奖励的6点积分,扣除标题违规惩罚性2点积分
───────────────── 版务记录 ─────────────────
───────────────── 版务记录 ─────────────────
执行:Will Sort
操作:移动主题:自《DOS疑難解答 & 問題討論(解答室)》
说明:本主题符合新成立的版区分划原则,且讨论已暂告结束
───────────────── 版务记录 ─────────────────
|
※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|
2006-6-8 12:32 |
|
|
zhangxue
初级用户
积分 183
发帖 82
注册 2006-3-28
状态 离线
|
『第
10 楼』:
请教(ms-dos环境下):
如果
%a%=b
%b%=2
那么如何将a和2关联起来?发现%%a%%并不等于2
|
|
2006-6-8 14:37 |
|
|
kcdsw
中级用户
积分 404
发帖 179
注册 2006-3-30
状态 离线
|
|
2006-6-9 09:38 |
|
|
mysuntjy
新手上路
积分 13
发帖 10
注册 2008-11-13 来自 重庆市
状态 离线
|
『第
12 楼』:
Quote: | Originally posted by zhangxue at 2006-6-8 14:37:
请教(ms-dos环境下):
如果
%a%=b
%b%=2
那么如何将a和2关联起来?发现%%a%%并不等于2 |
|
在命令行中用:call,echo %%a%%即可.
|
|
2008-12-23 22:57 |
|