中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理中判断用户的输入是否是一指定数值的方法
作者:
标题: 批处理中判断用户的输入是否是一指定数值的方法 上一主题 | 下一主题
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『楼 主』:  批处理中判断用户的输入是否是一指定数值的方法

欢迎测试......
@echo off&SETLOCAL ENABLEDELAYEDEXPANSION
title 批处理中判断用户的输入是否是一指定数值的方法,支持任何特殊字符的方法  by:vkill
findstr "^::要求输入为" "%~nx0" >"%temp%\b.txt" 2>nul ||(echo 你没有定义要求输入的数值&pause&exit/b)
:loop
cls
set v=&set/p=输入:<nul&set/p "v= "
echo.
if not defined v (echo 输入为空,不符合你的要求&goto end)
set v|findstr "^v="|more>"%temp%\a.txt"
set/p lv=<"%temp%\a.txt"
set/p=输入为 [ !lv:~2! ] <nul
>"%temp%\a.txt" set/p=::要求输入为!lv:~2!<nul
fc "%temp%\a.txt" "%temp%\b.txt" >nul 2>nul||(set/p=不<nul)
set/p=符合你的要求<nul
:end
echo.
pause
goto loop
::这里自己定义
::要求输入为~!@!~#@!$#!$!@$#@!%"


2007-4-9 09:33
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 2 楼』:  

用set/p fc 来解决特殊字符

要求输入为 这个变量直接set 和 set/p=<life 来获取是有差别的

   此帖被 +4 点积分        点击查看详情   
评分人:【 estar 分数: +4  时间:2007-4-9 10:32


2007-4-9 09:42
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
3391617
初级用户




积分 116
发帖 56
注册 2007-3-7
状态 离线
『第 3 楼』:  

先秘下,再研究。。。。。。



QQ=3391617
2007-4-9 10:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 4 楼』:  

你这段代码要做什么?

看不明白??



知,不觉多。不知,乃求知
2007-4-9 22:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
xxbsxg
新手上路





积分 7
发帖 4
注册 2005-11-12
状态 离线
『第 5 楼』:  

非常有用的,真是太谢谢了。

2007-4-9 23:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by flyinspace at 2007-4-9 22:01:
你这段代码要做什么?

看不明白??

呵呵,你要用的时候就知道了,可以防止 输入特殊字符 而导致错误退出

2007-4-10 01:52
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 7 楼』:  

研究性的代码请加上必要的注释

尤其是比较生僻和古怪的用法

因为没有人会乐意重现你的反复思考的过程

也会浪费许多的精力和帖子去讨论一些已经有结果的问题

-------------------------------

现在大概明白的你的核心思想

是将输入串和验证串分别写入两个临时文件

然后用fc进行文件比较

----------------------------------------

还有几个问题不明白

set/p=输入:<nul&set/p "v= "的用意何在?
为什么不用 set/p v=输入:

set v|findstr "^v="|more>"%temp%\a.txt"
其中的more起什么作用?
如果将变量名改为$v、_v等不可能被重复的临时名
是否可以避免findstr/more的使用?

显示输入结果的时候
为什么不直接显示变量v
而是通过lv从文件a.txt中读取呢?

另外对你的显示输出习惯很不适应
看的很别扭

2007-5-29 19:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by qzwqzw at 2007-5-29 19:47:
研究性的代码请加上必要的注释

尤其是比较生僻和古怪的用法

因为没有人会乐意重现你的反复思考的过程

也会浪费许多的精力和帖子去讨论一 ...

回 qzwqzw 兄:
关于研究性的代码请加上必要的注释这个,我在2楼给了提示的了,我想应该没有问题

关于set/p=输入:<nul&set/p "v= "的用意何在?为什么不用 set/p v=输入:
这个只是我写的习惯,呵呵,见凉

关于 改为$v、_v等不可能被重复的临时名 这个,我只是想用下  set v|findstr 这个很有用的,这个一般很少用,所以特别提下

关于直接显示变量v ,要是v中有 & =特殊字符我想不可以,不过我没有试

2007-5-29 20:23
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
pighead123
初级用户





积分 42
发帖 23
注册 2006-2-13
状态 离线
『第 9 楼』:  

用findstr ^$ 呵呵

  Quote:
@echo off
rem 谢谢zzzevazzz对代码的改进
rem 关于 set errorlevel=>nul set password=>nul 我还是选择了保留 这样避免其他程序
rem 如果调用这两个变量 会引起错误 ^password=ph4nt0m$的办法很好 我原来是想用sort
rem 进行顺序的调配 看来现在这个地方还是用zzzevazzz的方法比较好 sort 我就用在其他地方吧
rem the key.bat made by ALLyeSNO
cls
:allyesno
set errorlevel=>nul
echo 请输入登录口令
set password=allyesno is a pig>nul
set/p password=
set password|findstr "^password=ph4nt0m$"
if "%errorlevel%"=="0" echo 口令正确&goto end
echo 口令错误&goto allyesno
:end
set password=>nul
set errorlevel=>nul
echo 你成功登录系统

[ Last edited by pighead123 on 2007-5-29 at 09:23 PM ]





  Quote:
我是allyesno 帐号忘记密码了 妈的

2007-5-29 21:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 10 楼』:  

关于研究性的代码请加上必要的注释这个,我在2楼给了提示的了,我想应该没有问题
--------------
别把大家看得水平与你一样高
反正我是看得一头雾水,包括你的提示
搞得跟算命老头泄露盖世天机一样
刚开始还把set/p fc当成一个命令
现在才看出是两个,无语


关于set/p=输入:<nul&set/p "v= "的用意何在?为什么不用 set/p v=输入:
这个只是我写的习惯,呵呵,见凉
--------------
天哪!我为这个琢磨了半天呢
想谋杀我的脑细胞也不是这样干的呀?


关于 改为$v、_v等不可能被重复的临时名 这个,我只是想用下  set v|findstr 这个很有用的,这个一般很少用,所以特别提下
--------------
一般很少用,那就说明很少有用
所以除非有特别的目的,否则不要使用这个又累又怪的用法


关于直接显示变量v ,要是v中有 & =特殊字符我想不可以,不过我没有试
--------------
再次无语,就因为“我想不可以”,就有舍近求远,难以理解!
起码应该给出直接显示导致失败的例子嘛


总的来说
你的代码从头到尾我都看得很别扭
风格是一方面,习惯是一方面

2007-5-29 22:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: