中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 17:49
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如果在批处理中得到输入的变量
楼 主 如果在批处理中得到输入的变量 发表于 2003-03-19 00:00 ·  中国 辽宁 朝阳 联通
初级用户
积分 105
发帖 1
注册 2003-03-19 00:00
UID 1193
性别 男
状态 离线
我想做一个批处理实现在运行要求输入一个字符串,按照这个字符串转向相应的分支。(一定要在运行中输入,不能用一开始加参数的形式)应该怎么做啊

我开始想用环境变量,用一个批处理增强程序INPUT来接受键盘输入,可是不好用我的程序是:
cls
input "Please Input:" FN /s rem:这句是接受输入赋给"FN"
if FN=="aaa" goto a
if FN=="bbb" goto b
goto c

:a
echo This is a
goto c

:b
echo this is b
goto c

:c
End!!!
后来发现这个批处理增强命令INPUT不起作用。

各位高手帮忙吧。
2 发表于 2003-03-19 00:00 ·  中国 广东 佛山 顺德区 电信
中级用户
积分 223
发帖 36
注册 2003-01-08 00:00
UID 707
性别 男
状态 离线
可以考慮使用choice 呀﹐使用很簡單的
choice /? 看一下就知道如何用了。
3 发表于 2003-03-27 00:00 ·  中国 山东 烟台 联通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
To PLATCH:

运行中接受字符串变量是bat的一大弱点,若是没有其他增强命令的帮忙,单纯依靠DOS 自带的内外部命令来实现这一特征,代码量将是惊人的(我自己曾经试过),而且价值也不是很大。

我遇到此类问题,一般将它转化为从命令行接受字符串参数,然后转移到相应的子程序位点,这实现起来到不太难:

:start
find ":%1" > nul
if errorlevel 0 goto error
goto %1

:proc1
......

:proc2
......

:error
echo Invalid argument!

:end

如果你必须要实现此功能,可以给你一个建议,从主程序中用 %comspec% 抛出一个DOS的子SHELL,用命令行伪装的字符串传入程序,然而将子程序实现为独立的bat程序,直接调用运行。也许我说的不太清楚,如果你想探讨此一问题,再联系!




※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
4 发表于 2003-03-27 00:00 ·  加拿大 安大略省 多伦多
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
UID 9
状态 离线
我试了,不是INPUT不起作用,而是这个批处理程序本身有严重的BUG。

例如:
if FN=="aaa" goto a
if FN=="bbb" goto b

应改为:

if "%FN%"=="aaa" goto a
if "%FN%"=="bbb" goto b
Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

5 发表于 2006-05-01 11:00 ·  中国 江苏 南京 电信
初级用户
积分 21
发帖 9
注册 2006-04-09 22:43
UID 53591
状态 离线
6 发表于 2006-05-01 17:28 ·  日本
银牌会员
★★★
积分 1,246
发帖 488
注册 2003-11-11 00:00
UID 12699
性别 男
状态 离线
再插一句:

if "%FN%"=="bbb" goto b
中不等号如何表示?
7 发表于 2006-05-01 22:58 ·  中国 广东 云浮 新兴县 电信
荣誉版主
★★★
积分 718
发帖 313
注册 2005-09-26 00:00
UID 42844
性别 男
状态 离线
我所知,没有用不等号表示法,像C++的"!=",VB的"<>",只能用:
if not "%FN%"== "bbb" goto b
8 发表于 2006-05-02 08:02 ·  中国 上海 东方有线
中级用户
★★
积分 377
发帖 66
注册 2005-04-04 00:00
UID 37817
性别 男
状态 离线
如只用26个字母(如盘符)作输入可用以下笨办法:


Choice /C:defghijklmnopqrstuvwxyz /n Please Input disk symbol
if errorlevel 23 set input=z
if errorlevel 23 goto z
if errorlevel 22 set input=y
if errorlevel 22 goto y
if errorlevel 21 set input=x
if errorlevel 21 goto x
if errorlevel 20 set input=w
if errorlevel 20 goto w
if errorlevel 19 set input=v
if errorlevel 19 goto v
if errorlevel 18 set input=u
if errorlevel 18 goto u
if errorlevel 17 set input=t
if errorlevel 17 goto t
if errorlevel 16 set input=s
if errorlevel 16 goto s
if errorlevel 15 set input=r
if errorlevel 15 goto r
if errorlevel 14 set input=q
if errorlevel 14 goto q
if errorlevel 13 set input=p
if errorlevel 13 goto p
if errorlevel 12 set input=o
if errorlevel 12 goto o
if errorlevel 11 set input=n
if errorlevel 11 goto n
if errorlevel 10 set input=m
if errorlevel 10 goto m
if errorlevel 9 set input=l
if errorlevel 9 goto l
if errorlevel 8 set input=k
if errorlevel 8 goto k
if errorlevel 7 set input=j
if errorlevel 7 goto j
if errorlevel 6 set input=i
if errorlevel 6 goto i
if errorlevel 5 set input=h
if errorlevel 5 goto h
if errorlevel 4 set input=g
if errorlevel 4 goto g
if errorlevel 3 set input=f
if errorlevel 3 goto f
if errorlevel 2 set input=e
if errorlevel 2 goto e
if errorlevel 1 set input=d
if errorlevel 1 goto d
9 发表于 2006-05-02 08:16 ·  中国 上海 东方有线
中级用户
★★
积分 377
发帖 66
注册 2005-04-04 00:00
UID 37817
性别 男
状态 离线
用set /p 不知行不行?

set /p input= Please input a “string"
if %input%=="aaa" goto a
if %input%=="bbb" goto b

[ Last edited by hxj on 2006-5-2 at 08:26 ]
论坛跳转: