![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 03:20 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 可从外部调用参数执行的批处理脚本,能否精减内容? |
| 可打印版本 934 / 11 |
| 第1楼 ZULGMG | 发表于 2009-06-19 03:19 |
| 新手上路 发帖 9 积分 9 | |
|
可从外部调用参数执行的批处理脚本,能否精减内容? 以下第一个是网上找到的脚本,后面那个是我改的,能在其它脚本中用参数调用此脚本所指定的命令参数!
此脚本名为:ddd.cmd 在命令提示符中执行:ddd -h 能看到执行参数后的参数结果! 执行:ddd -h -b -d 能逐个执行所指定的参数! 如果按下面的来写好像要重复很多内容,搞了好久脑子转不过弯,不知道该如何改写能精减些? 另外,同问下有没有其它的写法?最终效果与此脚本相同? 大家帮看下,谢谢!此脚本内容如下: 这个是网上找到的: @ECHO off if "%1"=="" goto :DSa if "%1"=="/" goto :DSa if "%1"=="?" goto :DSa if "%1"=="/?" goto :DSa if "%1"=="-h" goto :DSa if "%1"=="/h" goto :DSa :DSa ECHO.yes pause>nul ################# 下面这个是我参照其它例子改的,为方便测试加入数字: @ECHO off :: ========================= :: 参数1 if ""=="%1" goto enda if "%1"=="/" goto DSa if "%1"=="?" goto DSa if "%1"=="/?" goto DSa if "%1"=="-h" goto DSa if "%1"=="/h" goto DSa if "%1"=="b" goto BSa if "%1"=="-b" goto BSa if "%1"=="/b" goto BSa if "%1"=="-d" goto DS2a if "%1"=="/d" goto DS2a If not ""=="%1" goto NONO1 goto enda :DSa ECHO.帮助参数 1 pause>nul goto enda :BSa ECHO.备份参数 1 pause>nul goto enda :DS2a ECHO.清空参数 1 pause>nul goto enda :NONO1 set err="%1" echo.没有 %err% 这个参数! 1 pause>nul :enda :: ========================= :: 参数2 if ""=="%2" goto endb if "%2"=="/" goto DSb if "%2"=="?" goto DSb if "%2"=="/?" goto DSb if "%2"=="-h" goto DSb if "%2"=="/h" goto DSb if "%2"=="-b" goto BSb if "%2"=="/b" goto BSb if "%2"=="-d" goto DS2b if "%2"=="/d" goto DS2b If not ""=="%2" goto NONO2 goto endb :DSb ECHO.帮助参数 2 pause>nul goto endb :BSb ECHO.备份参数 2 pause>nul goto endb :DS2b ECHO.清空参数 2 pause>nul goto endb :NONO2 set err="%2" echo.没有 %err% 这个参数! 2 pause>nul :endb :: ========================= :: 参数3 if ""=="%3" goto endc if "%3"=="/" goto DSc if "%3"=="?" goto DSc if "%3"=="/?" goto DSc if "%3"=="-h" goto DSc if "%3"=="/h" goto DSc if "%3"=="-b" goto BSc if "%3"=="/b" goto BSc if "%3"=="-d" goto D3Sc if "%3"=="/d" goto D3Sc If not ""=="%3" goto NONO3 goto endc :DSc ECHO.帮助参数 3 pause>nul goto endc :BSc ECHO.备份参数 3 pause>nul goto endc :D3Sc ECHO.清空参数 3 pause>nul goto endc :NONO3 set err="%3" echo.没有 %err% 这个参数! 3 pause>nul :endc [ Last edited by ZULGMG on 2009-6-19 at 08:51 ] |
|
| 第2楼 Hanyeguxing | 发表于 2009-06-19 03:30 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
你可以只使用1个传递参数,即示例中的参数1。
|
|
| 第3楼 ZULGMG | 发表于 2009-06-19 03:46 |
| 新手上路 发帖 9 积分 9 | |
|
谢谢Hanyeguxing,如果只使用1个传递参数,执行 ddd -h -d -b 后面的 -d -b将不能正常显示
![]() [ Last edited by ZULGMG on 2009-6-19 at 04:20 ] |
|
| 第4楼 Hanyeguxing | 发表于 2009-06-19 08:49 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
相同的部分用call
例如: if "%1"=="/" goto DSa 改成 if "%1"=="/" call :DSa 这样下面就可以使用一个:DSa了 :DSa ECHO.帮助参数 pause>nul goto :eof |
|
| 第5楼 ZULGMG | 发表于 2009-06-19 08:56 |
| 新手上路 发帖 9 积分 9 | |
|
感谢 Hanyeguxing ,兄弟这就试试!谢谢!
|
|
| 第6楼 ZULGMG | 发表于 2009-06-19 10:05 |
| 新手上路 发帖 9 积分 9 | |
|
感谢 Hanyeguxing ,刚才改时太忙,有地方没改对,这样的精减方式对了,不过判断用户输入的参数又错了
![]() 以下这个改与不改一样,还有没别的办法? If not ""=="%2" goto NONO2 也改为: If not ""=="%2" call :NONO 也是不行 @ECHO off :: ========================= :: 参数1 if ""=="%1" goto enda if "%1"=="/" goto ASa if "%1"=="?" goto ASa if "%1"=="/?" goto ASa if "%1"=="-h" goto ASa if "%1"=="/h" goto ASa if "%1"=="-b" goto BSa if "%1"=="/b" goto BSa if "%1"=="-d" goto AS2a if "%1"=="/d" goto AS2a If not ""=="%1" goto NONO1 goto enda :ASa ECHO.帮助参数 pause>nul goto enda :BSa ECHO.备份参数 pause>nul goto enda :AS2a ECHO.清空参数 pause>nul goto enda :NONO1 set err="%1" echo.没有 %err% 这个参数! pause>nul goto enda :enda :: ========================= :: 参数2 if ""=="%2" goto endb if "%2"=="/" call :ASa if "%2"=="?" call :ASa if "%2"=="/?" call :ASa if "%2"=="-h" call :ASa if "%2"=="/h" call :ASa if "%2"=="-b" call :BSa if "%2"=="/b" call :BSa if "%2"=="-d" call :AS2a if "%2"=="/d" call :AS2a If not ""=="%2" goto NONO2 goto endb :NONO2 set err="%2" echo.没有 %err% 这个参数! pause>nul goto endb :endb :: ========================= :: 参数3 if ""=="%3" goto endc if "%3"=="/" call :ASa if "%3"=="?" call :ASa if "%3"=="/?" call :ASa if "%3"=="-h" call :ASa if "%3"=="/h" call :ASa if "%3"=="-b" call :BSa if "%3"=="/b" call :BSa if "%3"=="-d" call :AS2a if "%3"=="/d" call :AS2a If not ""=="%3" goto NONO3 goto endc :NONO3 set err="%3" echo.没有 %err% 这个参数! pause>nul goto endc :endc -------------------------------------------------------------------------------------------- 执行后命令显示: G:\>001 -h 帮助参数 G:\>001 -b 备份参数 G:\>001 -d 清空参数 G:\>001 -d -h 清空参数 帮助参数 没有 "-h" 这个参数! G:\>001 -d -h -d 清空参数 帮助参数 没有 "-h" 这个参数! 清空参数 没有 "-d" 这个参数! G:\> [ Last edited by ZULGMG on 2009-6-19 at 10:54 ] |
|
| 第7楼 Hanyeguxing | 发表于 2009-06-19 13:38 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
如果要求批处理不开变量延迟,可以这样写
[ Last edited by Hanyeguxing on 2009-6-19 at 14:04 ] |
|
| 第8楼 Hanyeguxing | 发表于 2009-06-19 14:37 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
如果允许使用变量延迟,并忽略错误的参数,可以这样写
错误的参数,将自动不被执行。。。 [ Last edited by Hanyeguxing on 2009-6-19 at 14:42 ] |
|
| 第9楼 ZULGMG | 发表于 2009-06-19 23:01 |
| 新手上路 发帖 9 积分 9 | |
|
谢谢 Hanyeguxing 兄弟,在我意识中还有一种写法,现在有了点想法,不过还没着手,一时之间头绪不是很清楚,得重新学习学习,唉……几年没摸电脑,都快退化回人猿人了……
Hanyeguxing 兄弟一定搞了很晚,谢谢兄弟了,兄弟注意休息,身体要紧啊…… [ Last edited by ZULGMG on 2009-6-19 at 23:04 ] |
|
| 第10楼 ZULGMG | 发表于 2009-06-19 23:34 |
| 新手上路 发帖 9 积分 9 | |
|
没时间了不想这么多了,先用上 Hanyeguxing 兄弟7楼的吧,有空再来看看,加了 Hanyeguxing 兄弟QQ,请兄弟验证,
谢谢![ Last edited by ZULGMG on 2009-6-19 at 23:40 ] |
|
| 第11楼 netbenton | 发表于 2009-06-20 00:50 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
可处理多个参数,多种错误结果
维护选项方便 [ Last edited by netbenton on 2009-6-19 at 23:01 ] |
|
| 第12楼 ZULGMG | 发表于 2009-06-21 23:02 |
| 新手上路 发帖 9 积分 9 | |
|
谢谢 netbenton 就是这样了!谢谢!
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |