[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】询问批处理如何判断用户输入的参数是否符合规定要求?

例如在下面这个代码中
需要用户输入IP地址
IP地址的格式是 xx.xx.xx.xx
xx在1到255之间的数,且IP地址共有四段(由 . 来分割)
请问如何判断用户的输入符合格式要求呢?
符合要求的话显示IP地址,不符合的话要求重新输入
谢谢~

@echo off
:input
set /p ip=请输入IP地址

:right
echo IP Address: %ip%
goto end

:wrong
goto inpunt

:end
pause

[ 本帖最后由 ultrasurf 于 2009-3-21 09:43 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

回复 7楼 的帖子

//第一位必须是1-9,然后后面如果有数字,必须是是0-9之间的数字
有没有注意到$符号呢?

//set 后面的和结束的双引号""不是必须的吧?
是不是必须的,你可以亲自测试一下。不管怎样,大多数情况下,加双引号是个好习惯。

//是不是不用这步的话,也可以在下一句for里面用 /k delims=. 来处理的吧?
你可以亲自尝试一下是否可行。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

学习了一下,明白了
版主有空的话看看我理解得对不对吧~谢谢~

@echo off

set "pp=[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*$"
rem 第一位必须是1-9,然后后面如果有数字,必须是是0-9之间的数字
rem \是转义符,说明后面的特殊符号.是作为字符
rem comments: 对于我这种情况,应该也等价于 ^[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*$ 吧.还有 set 后面的和结束的双引号""不是必须的吧?

set flag=&set /p ip= 请输入IP地址 &cls
rem 这里有三句命令 set flag = 一开始flag未被定义
rem set /p ip= 让用户输入IP
rem cls 清屏

echo %ip%|findstr /x "%pp%">nul||set flag=a
rem 对于用户输入的IP地址,完全根据一开始定义的pp进行匹配
rem 如果出错,则对flag进行标记*定义)

set var=%ip:.= %
rem 将ip地址中的.全部替换为空格
rem 是不是不用这步的话,也可以在下一句for里面用 /k delims=. 来处理的吧?

for %%a in (%var%) do if %%a gtr 255 set flag=a
rem 对于IP地址中任意一位>255(错误的情况),对flag做标记

if defined flag (echo %ip% 错误) else echo %ip% 正确
rem 如果flag未被定义过,则正确,否则,出错

pause

TOP

回复 5楼 的帖子

问题1:本论坛搜索“findstr正则表达式”
问题2:查看set命令的帮助:
Environment variable substitution has been enhanced as follows:

    %PATH:str1=str2%

would expand the PATH environment variable, substituting each occurrence
of "str1" in the expanded result with "str2".  "str2" can be the empty
string to effectively delete all occurrences of "str1" from the expanded
output.  "str1" can begin with an asterisk, in which case it will match
everything from the beginning of the expanded output to the first
occurrence of the remaining portion of str1.
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP


就是这句,看晕了
"pp=[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*$"
对于Ip地址, findstr /x "pp=[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*$"

/x是完全匹配,那么这里的pp到底是怎么匹配呢?

还有这句:
set var=%ip:.= %
ip:.= 是什么意思呢?

谢谢~

TOP

回复 3楼 的帖子

哪句不懂,就问哪句,有很多热心人会告诉你答案;如果全部不懂,建议先去教学区学习基础教程,这样才能更快的掌握批处理。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

谢谢版主
代码非常好用,不过请问版主能解释一下代码的含义吗....
好象看不大懂,,,

谢谢~

TOP

  1. @echo off
  2. set "pp=[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*$"
  3. set flag=&set /p ip= 请输入IP地址 &cls
  4. echo %ip%|findstr /x "%pp%">nul||set flag=a
  5. set var=%ip:.= %
  6. for %%a in (%var%) do if %%a gtr 255 set flag=a
  7. if defined flag (echo %ip% 错误) else echo %ip% 正确
  8. pause
复制代码
技术问题请到论坛发帖求助!

TOP

返回列表