Board logo

标题: 怎样取得批处理参数中的特殊字符? [打印本页]

作者: afxwzg     时间: 2007-6-5 12:01    标题: 怎样取得批处理参数中的特殊字符?

小弟我编的一段批处理代码需要用到批处理参数,测试时发现一些特殊字符无法显示出来,例如下面一段代码:
aaa.bat
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
setlocal EnableDelayedExpansion
set 111=%1
set 222=%2
set 333=%3
echo !111!
echo !222!
echo !333!
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
我输入“aaa.bat !a =a ;a”,结果只显示了3个a,前面的符号!=;都没有显示出来,我在这些字符前都加上转义字符^,结果还是3个a。请问大家该怎么获取这些特殊符号?
作者: bjsh     时间: 2007-6-5 15:50
= , ; 等几个 符号在参数中 被当作 分隔符;

如果确实想把他们做为 参数 可以加 引号 ;再利用 %~1 来去掉引号'

比如 a;ta 将被当作 a 和 ta 两个参数;

!被吃掉是因为 在set赋值时启用了变量延迟;

可以把变量延迟 放到 set 后再启用;

具体代码可改为:
@echo off
set 111=%~1
set 222=%~2
set 333=%~3
setlocal EnableDelayedExpansion
echo !111!
echo !222!
echo !333!
aaa.bat "!a" "=a" ";a"

  Quote:
!a
=a
;a


作者: afxwzg     时间: 2007-6-5 16:31
多谢版主
也就是说,凡是参数里带有= , ;字符的,都要用引号括起,然后再在程序中去掉
这么做虽然麻烦一些,但好像也只有这样了
作者: afxwzg     时间: 2007-6-5 16:44
另外还想问下,分隔符=;,和分隔符空格有什么区别吗?
作者: lxmxn     时间: 2007-6-5 21:59
应该没什么区别了。
作者: rocmagic     时间: 2007-10-16 18:37
就是这样的吧