Board logo

标题: 批处理中判断用户的输入是否是一指定数值的方法 [打印本页]

作者: vkill     时间: 2007-4-9 09:33    标题: 批处理中判断用户的输入是否是一指定数值的方法
欢迎测试......
@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
::这里自己定义
::要求输入为~!@!~#@!$#!$!@$#@!%"

作者: vkill     时间: 2007-4-9 09:42
用set/p fc 来解决特殊字符 要求输入为 这个变量直接set 和 set/p=<life 来获取是有差别的

作者: 3391617     时间: 2007-4-9 10:28
先秘下,再研究。。。。。。

作者: flyinspace     时间: 2007-4-9 22:01
你这段代码要做什么? 看不明白??

作者: xxbsxg     时间: 2007-4-9 23:03
非常有用的,真是太谢谢了。

作者: vkill     时间: 2007-4-10 01:52
Originally posted by flyinspace at 2007-4-9 22:01: 你这段代码要做什么? 看不明白??
呵呵,你要用的时候就知道了,可以防止 输入特殊字符 而导致错误退出

作者: qzwqzw     时间: 2007-5-29 19:47
研究性的代码请加上必要的注释 尤其是比较生僻和古怪的用法 因为没有人会乐意重现你的反复思考的过程 也会浪费许多的精力和帖子去讨论一些已经有结果的问题 ------------------------------- 现在大概明白的你的核心思想 是将输入串和验证串分别写入两个临时文件 然后用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中读取呢? 另外对你的显示输出习惯很不适应 看的很别扭

作者: vkill     时间: 2007-5-29 20:23
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中有 & =特殊字符我想不可以,不过我没有试

作者: pighead123     时间: 2007-5-29 21:20
用findstr ^$ 呵呵
@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 ]

作者: qzwqzw     时间: 2007-5-29 22:05
关于研究性的代码请加上必要的注释这个,我在2楼给了提示的了,我想应该没有问题 -------------- 别把大家看得水平与你一样高 反正我是看得一头雾水,包括你的提示 搞得跟算命老头泄露盖世天机一样 刚开始还把set/p fc当成一个命令 现在才看出是两个,无语 关于set/p=输入:<nul&set/p "v= "的用意何在?为什么不用 set/p v=输入: 这个只是我写的习惯,呵呵,见凉 -------------- 天哪!我为这个琢磨了半天呢 想谋杀我的脑细胞也不是这样干的呀? 关于 改为$v、_v等不可能被重复的临时名 这个,我只是想用下 set v|findstr 这个很有用的,这个一般很少用,所以特别提下 -------------- 一般很少用,那就说明很少有用 所以除非有特别的目的,否则不要使用这个又累又怪的用法 关于直接显示变量v ,要是v中有 & =特殊字符我想不可以,不过我没有试 -------------- 再次无语,就因为“我想不可以”,就有舍近求远,难以理解! 起码应该给出直接显示导致失败的例子嘛 总的来说 你的代码从头到尾我都看得很别扭 风格是一方面,习惯是一方面