无忧启动论坛

标题: 脚本的传入参数中有特殊字符 [打印本页]

作者: 2011tangzl    时间: 2011-3-1 16:05
标题: 脚本的传入参数中有特殊字符
各位:我现在要写一个名为1.bat的脚本,这个脚本实现的是
判断传入参数是空就输出0,否则输出1.
1.bat脚本内容:
@echo off & setlocal enabledelayedexpansion
set param1=%~1
if ""=="!param1!" (
    echo 0
) else (
    echo 1
)
问题: 我正常传入参数程序都OK,但是如果像下边这样传一些特殊字符的参数,
执行时就会出现编译错误。
1.bat &&,1.bat "&&" 等等。
请教各位高手,在脚本中怎样处理才能实现不管传入什么参数都不会产生错误。
谢谢了。
作者: haiou327    时间: 2011-3-1 17:13
&和&&都是组合命令这种方法好象实现不了,
写了个Console,看能不能满足你的要求,当参数含有特殊字符时最好用“”括起来才能正确返回

[ 本帖最后由 haiou327 于 2011-3-1 17:17 编辑 ]

Snap1.jpg (11.89 KB, 下载次数: 65)

Snap1.jpg

Result.rar

9.08 KB, 下载次数: 33, 下载积分: 无忧币 -2


作者: mrwang123    时间: 2011-3-1 17:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: chenall    时间: 2011-3-1 17:13
首先要实现不管传入什么参数都不会产生错误,这个基本上是不太可能的。

但是可以尽量保证不出错。

第一句使用""
set "param1=%~1"
后面的若非必要不要直接调用变量,这样也可以免去一些特殊字符产生的错误。。

我不知道你完整的批处理是什么。
后面的可以改为
if defined  param1 (
   echo 0
) else (
    echo 1
)
作者: 2011tangzl    时间: 2011-3-1 22:34
感谢各位的回答。
因为程序的传入参数是由用户输入,所以输入什么都有可能,
所以想实现输入什么参数都不能出现错误。
这个程序对输入的参数有下面几个check处理。
1,先判断参数1是否有值,如果有值继续下面的步骤2的判断,否则退出程序。
2,判断参数1的值是否等于字符串“-b“,如果等于就退出,否则将该值作为参数传给另一个command命令。

难道想实现无论参数输入什么都不产生错误,不能实现吗?
作者: chenall    时间: 2011-3-2 08:40
使用4楼的方案足以应付多种情况
set "arg1=%~1"
if not defined arg1 goto :eof
if /i "%arg1%"=="-b" goto :eof
::把所有参数都传给command2
command2 %*

用户输入的参数如果有带特殊字符需要自己用引号就
比如你上面的
11.bat "&&" "||" "|"




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3