中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS学习入门 & 精彩文章 (教学室) » [求助]批处理中 录入屏幕输入的字符串变量 语句如何
作者:
标题: [求助]批处理中 录入屏幕输入的字符串变量 语句如何 上一主题 | 下一主题
hzy
高级用户




积分 578
发帖 135
注册 2003-7-10
状态 离线
『楼 主』:  [求助]批处理中 录入屏幕输入的字符串变量 语句如何

我想写一个这样的批处理:

通过屏幕输入“字符串”,然后将这个%字符串%变量赋值到下面的命令,该怎么写?要用什么工具吗?

for %a in (c: d: e: f: g: h do Dir /B /S %a\%字符串%

[此贴子已经被作者于2003-7-23 20:27:29编辑过]




2003-7-23 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Roy
管理员

專業島民



积分 4869
发帖 1633
注册 2002-12-10
状态 离线
『第 2 楼』:  

:: Get user input - includes error check
@echo off
echo e102'set %%1='> %temp%.\t1.dat
for %%? in (w q) do echo %%?>> %temp%.\t1.dat
:input
echo.
echo Type input:
FC con nul /lb1 /n |FIND "1:" > %temp%.\t2.bat
:: Error checking begins here
FIND "|" %temp%.\t2.bat > nul
if not errorlevel=1 goto error
FIND "=" %temp%.\t2.bat > nul
if not errorlevel=1 goto error
FIND " nul
if not errorlevel=1 goto error
FIND ">" %temp%.\t2.bat > nul
if not errorlevel=1 goto error
:: Error checking end
DEBUG %temp%.\t2.bat  nul
call %temp%.\t2.bat 字符串
for %%? in (t1.dat t2.bat) do del %temp%.\%%?
echo 字符串=%字符串%
goto eof
:error
echo.
echo @PROMPT Invalid input. Invalid characters: $Q $L $G $B$_> %temp%.\t2.bat
%comspec% /c %temp%.\t2.bat |FIND ":"
goto input
:eof





我的網站:http://mw16.2ya.com/ 我的網誌: http://scrappedblog.blogspot.com/
~
我的Winamp正在播放的歌曲:
2003-7-23 00:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hzy
高级用户




积分 578
发帖 135
注册 2003-7-10
状态 离线
『第 3 楼』:  

谢谢斑竹!可是我看了还是不太懂!

2003-7-23 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
GOTOmsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 4 楼』:  

首先我觉得批处理的手段一般来说达不到问者的这个要求(否则要编一个复杂的脚本),能不能灵活处理一下,比如,要用"%wer%"变量就得预先设好([除了在自动批处理autoexec.bat中和在配置文件config.sys中之外],还可当场在屏幕中输入"set wer=dfhgire.txt",这是不是满足了问者要在屏幕输入字符串的要求?),
要不然问者的要求是:在屏幕输入仅仅这个"变量名"(wer),这跟批处理的"%--%"变量的用法矛盾.
其实,还有一种变量可以符合问者的基本意图: %1-%9
写成批处理:  for %a in (c: d: e: f: g: h do dir /b /s %a\%1
然后在屏幕输入dfhgire.txt
这样是不是基本满足问者的要求?


2003-8-18 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 5 楼』:  

Re hzy:

    正如 GOTOmsdos 所说,单纯使用基本dos命令所组成的批处理,要达到问者的这个要求,需要编写相当复杂的脚本。Roy给出的范例就可见一般。通常这种情况下,我们所要做的是转化矛盾,灵活处理,而非一味蛮干。事实上,Roy所给出的例子除了能让人惊讶、感叹和迷糊之外,没有什么其他的价值。虽然我自己也很喜欢让别人惊讶、感叹和迷糊 :)

   再提供一个灵活的思路吧,通常在批处理中需要获取一个字符传,最简单也最常用的方法是使用命令行参数。我们可以在用户未输入参数串显示帮助文本,给出正确的参数用法;在输入错误的参数串时给出错误提示,这样做起来并不难。

    或者,如果预见到字符串的可选域不是很大,那么可以“单项选择”:
    echo 1. *.txt  2. *.tmp 3. *.exe  
    choice /c:123 /n

    或者,你就想在批处理运行半截子之后,突然想到获取一个字符串,并且存在环境变量中,那么你需要一个工具:askenv.exe。“新dos时代”的脚本工具就有下载。

    另外,纠正一个小bug:“通过屏幕输入“字符串””

    屏幕是输出设备,不能“输入”字符串,输入字符串通常是键盘的任务。




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2003-9-6 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
iceboy
银牌会员




积分 1681
发帖 512
注册 2003-8-2
状态 离线
『第 6 楼』:  

从上面的批处理程序,我们可以学到不少东西哦...

如,不确定 %TEMP% 是 C:\ 还是 C:\TEMP,就用 %TEMP%.\
如果是 C:\,就成了 C:\.\
如果是 C:\TEMP,就成了 C:\TEMP.\
两者都没错哦!



Somehow somewhere I've got to choose.
No matter if it is win or lose.
2003-9-6 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jhhjwok
中级用户




积分 278
发帖 52
注册 2003-6-10
状态 离线
『第 7 楼』:  

用INPUT小程序可以操作!

2003-10-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: