- 帖子
- 508
- 积分
- 1490
- 技术
- 87
- 捐助
- 0
- 注册时间
- 2008-7-17
|
本帖最后由 qzwqzw 于 2014-12-9 23:31 编辑
几乎所有的Windows的命令行程序都支持/?开关
这个开关的作用就是显示命令的帮助信息
但是测试发现这个开关有很多有意思的事情
大多数程序的/?开关可以放在其他参数或开关之前、之后或之间
即使中间没有空格 比如 dir xxxx/?yyyy
都仍然可以正常解读/?并显示帮助信息
除非/?紧跟在一个/的后面
cmd会把//?误以为是一个//开关和一个?字符串
而///?会被cmd认为是一个//的开关和一个/?开关
所以仍然可以正常显示帮助信息
但是对于echo,if,for,rem命令就比较特殊
ECHO
如果将/?放在其他字符串前面
echo /?yyy仍然显示帮助信息
如果将/?放在其他字符串后面
echo xxx/?会放弃显示帮助信息
也就是说echo仅在第一个参数以/?起始时
才显示帮助信息
这也就是echo+/?可以显示/?
而echo=/?却显示帮助信息的原因之一
FOR
如果将/?放在其他字符串前面或后面并且没有空格
for xxx/?yyy仍然显示帮助信息
如果/?前后有空格
for xxx /?或者for /? yyy会报不应有xxx和yyy的错误
也就是说for仅在有且只有一个参数并包含/?时
才显示帮助信息
这是因为for后面有其他关键字
所以/?必须作为一个独立参数单独解析
IF
如果将/?放在其他字符串前面或者后面
则if都会放弃显示帮助信息
if xxx/?会显示帮助信息
if /?yyy==/?yyy会比较字符串
if /?==/?既不会显示帮助也不比较字符串
而是会报不应有/?的语法错误
也就是说if仅在有且只有一个参数并以/?结尾i时
才显示帮助信息
所以仅在两个字符串的前面添加防御字符是有风险的
REM
rem的情况与for相似
如果/?后有空格,比如rem xxx/? yyy
即/?被理解为第一个参数
则会报不应有yyy的错误
如果/?前有空格,比如rem xxx /?yyy
即/?被理解为第二个参数
则rem将注释所有的字符串
也就是说rem仅在有且只有一个参数并包含/?时
才显示帮助信息
所以代码中使用rem注释时第一个字符串千万不能包含/? |
-
1
评分人数
-
|