楼 主
批处理中判断用户的输入是否是一指定数值的方法
发表于 2007-04-09 09:33 · 中国 甘肃 平凉 电信
金牌会员
★★★★
积分 4,103 发帖 1,744 注册 2006-01-20 13:00 UID 49241 性别 男 来自 甘肃.临泽
状态 离线
欢迎测试......
@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=输入为 <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
::这里自己定义
::要求输入为~!@!~#@!$#!$!@$#@!%"
第 2 楼
发表于 2007-04-09 09:42 · 中国 甘肃 平凉 电信
金牌会员
★★★★
积分 4,103 发帖 1,744 注册 2006-01-20 13:00 UID 49241 性别 男 来自 甘肃.临泽
状态 离线
用set/p fc 来解决特殊字符
要求输入为 这个变量直接set 和 set/p=<life 来获取是有差别的
本帖最近评分记录
(共 1 条)
点击查看详情
评分人 分数 时间
estar
+4
2007-04-09 10:32
第 3 楼
发表于 2007-04-09 10:28 · 中国 辽宁 丹东 联通
初级用户
★★
积分 116 发帖 56 注册 2007-03-07 04:53 UID 80966 性别 男
状态 离线
第 4 楼
发表于 2007-04-09 22:01 · 中国 广东 广州 海珠区 电信
银牌会员
★★★
积分 1,206 发帖 517 注册 2007-03-25 01:18 UID 82819 性别 男
状态 离线
你这段代码要做什么?
看不明白??
知,不觉多。不知,乃求知
第 5 楼
发表于 2007-04-09 23:03 · 中国 山东 聊城 电信
新手上路
★
积分 7 发帖 4 注册 2005-11-12 15:38 UID 45115 性别 男
状态 离线
第 6 楼
发表于 2007-04-10 01:52 · 中国 甘肃 平凉 电信
金牌会员
★★★★
积分 4,103 发帖 1,744 注册 2006-01-20 13:00 UID 49241 性别 男 来自 甘肃.临泽
状态 离线
Originally posted by flyinspace at 2007-4-9 22:01:
你这段代码要做什么?
看不明白??
呵呵,你要用的时候就知道了,可以防止 输入特殊字符 而导致错误退出
第 7 楼
发表于 2007-05-29 19:47 · 中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343 发帖 636 注册 2004-03-06 00:00 UID 19350 性别 男
状态 离线
研究性的代码请加上必要的注释
尤其是比较生僻和古怪的用法
因为没有人会乐意重现你的反复思考的过程
也会浪费许多的精力和帖子去讨论一些已经有结果的问题
-------------------------------
现在大概明白的你的核心思想
是将输入串和验证串分别写入两个临时文件
然后用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中读取呢?
另外对你的显示输出习惯很不适应
看的很别扭
第 8 楼
发表于 2007-05-29 20:23 · 中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103 发帖 1,744 注册 2006-01-20 13:00 UID 49241 性别 男 来自 甘肃.临泽
状态 离线
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中有 & =特殊字符我想不可以,不过我没有试
第 9 楼
发表于 2007-05-29 21:20 · 中国 广东 茂名 电信
初级用户
★
积分 42 发帖 23 注册 2006-02-13 04:23 UID 50270
状态 离线
用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 ]
第 10 楼
发表于 2007-05-29 22:05 · 中国 江西 南昌 电信
银牌会员
★★★
天的白色影子
积分 2,343 发帖 636 注册 2004-03-06 00:00 UID 19350 性别 男
状态 离线
关于研究性的代码请加上必要的注释这个,我在2楼给了提示的了,我想应该没有问题
--------------
别把大家看得水平与你一样高
反正我是看得一头雾水,包括你的提示
搞得跟算命老头泄露盖世天机一样
刚开始还把set/p fc当成一个命令
现在才看出是两个,无语
关于set/p=输入:<nul&set/p "v= "的用意何在?为什么不用 set/p v=输入:
这个只是我写的习惯,呵呵,见凉
--------------
天哪!我为这个琢磨了半天呢
想谋杀我的脑细胞也不是这样干的呀?
关于 改为$v、_v等不可能被重复的临时名 这个,我只是想用下 set v|findstr 这个很有用的,这个一般很少用,所以特别提下
--------------
一般很少用,那就说明很少有用
所以除非有特别的目的,否则不要使用这个又累又怪的用法
关于直接显示变量v ,要是v中有 & =特殊字符我想不可以,不过我没有试
--------------
再次无语,就因为“我想不可以”,就有舍近求远,难以理解!
起码应该给出直接显示导致失败的例子嘛
总的来说
你的代码从头到尾我都看得很别扭
风格是一方面,习惯是一方面
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正