![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-23 17:58 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,274 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何对用户的输入进行预处理? |
| 可打印版本 1,167 / 5 |
| 第1楼 wingofsea | 发表于 2006-06-06 11:37 |
| 初级用户 发帖 34 积分 124 | |
|
如何对用户的输入进行预处理? 如下的一个要求:
用户要求输入一个路径,batch程序读取该路径,并与batch中定义的相对路径进行拼接,这样可能会遇到如下的问题: @echo off set log=\err.log set /p installoc=please input the path of utility installation location: pushd %installoc% 2>nul popd set a_path=%installoc%%log% echo The path of log file is %a_path% 如果用户输入 c:\utility\, 则 a_path 为 c:\utility\\err.log, 请注意这里会有两个 \\, 如何规则这个绝对路径,输出为 c:\utility\err.log, 谢谢,学习中.... |
|
| 第2楼 bagpipe | 发表于 2006-06-06 12:23 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
楼主好像很不小心,你第一个变量定义的是\err.log,而你输入的路径是c:\utility\这本来就有两个\\符号,当然路径就显示 c:\utility\\err.log了,如果你的第一个变量是ERR.LOG或者你输入的路径是C:\UTILITY应该就不会出现\\这个符号了 .......
|
|
| 第3楼 willsort | 发表于 2006-06-06 18:35 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re wingofsea:
首先,在CMD中,“\\”是有效的,与“\”基本等同,所以通常不需要“预处理”。 其次,如果需要预处理,可以使用for语句,如下: for %%p in ("%installoc%%log%") do set a_path=%%~p |
|
| 第4楼 wingofsea | 发表于 2006-06-08 10:59 |
| 初级用户 发帖 34 积分 124 | |
|
to bagpipe:
谢谢 首先,c:\utility\ 是由用户输入的,路径的输入是用户控制的,他可以输入 c:\utility\ 也可以输入c:\utility , 所以需要进行预处理。 to willsort: 谢谢,因为程序会将这个a_path输出到终端,如果用户看到 c:\utility\\err.log,会有点别扭,所以想进行规范化,用 您给的这条语句好像还是不行: @echo off set log=\err.log set /p installoc=please input the path of utility installation location: pushd %installoc% 2>nul popd for %%p in ("%installoc%%log%") do set a_path=%%~p echo %a_path% pause |
|
| 第5楼 willsort | 发表于 2006-06-08 11:41 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re wingofsea:
抱歉! 事例代码中的可替换变量%%p少写了一个修饰字f,如下: for %%p in ("%installoc%%log%") do set a_path=%%~fp 另外,用以下的方法可以仅替换 \\ 为 \ : set a_path=%installoc%%log% set a_path=%a_path:\\=\% 但路径的规范化总是比我们想象的要复杂,尤其在这个路径是由用户自由输入的时候,有很多意外的情况。比如,路径中出现了非法字符,路径中同时含有空格和引号等等,这给我们的编码带来很多困难。如果你有深入的兴趣,可以参考以下信息: 如何从用户传入的参数中去掉引号? http://www.cn-dos.net/forum/viewthread.php?tid=20838 |
|
| 第6楼 wentimao | 发表于 2006-06-10 09:14 |
| 初级用户 发帖 27 积分 110 | |
|
直接用一个if not exist "%a_path%\"来判断目录是否存在,不存在就是输错了,跳回去重输
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |