中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-17 00:49
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理中判断用户的输入是否是一指定数值的方法 查看 1,228 回复 9
楼 主 批处理中判断用户的输入是否是一指定数值的方法 发表于 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
性别 男
状态 离线
先秘下,再研究。。。。。。
QQ=3391617
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 ]
我是allyesno 帐号忘记密码了 妈的
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中有 & =特殊字符我想不可以,不过我没有试
--------------
再次无语,就因为“我想不可以”,就有舍近求远,难以理解!
起码应该给出直接显示导致失败的例子嘛


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