批处理对输入的ip地址做合规验证
批处理对输入的ip地址做合规验证
批处理中有时候需要用户输入,这就要保证输入合规以获得正确的输出。
比如需要用户输入ip地址来进行一系列操作,以下是一个验证ip地址的示例:
@echo off:begincall :input_ipcls:input_ipecho 请输入IP地址:set /p ip=if not defined ip (call :ip_error)call :check_ipif %errorlevel% == 2 call :ip_errorgoto :main:ip_errorecho 输入了错误的IPecho.call :input_ip:check_ip%=== 过滤掉\\前缀 ===%if %ip:~0,2% equ \\ (set ip=%ip:~2%)%=== 禁止本机127.0.0.1 IP ===%if %ip% == 127.0.0.1 (exit /b 2)%=== 超过15个字符长度则输入错误,重新输入 ===%set len=%ip:~15%if defined len (exit /b 2) %=== 正则过滤出符合条件的字符,不符则重新输入 ===%echo %ip%|findstr "^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$">nul 2>nul || exit /b 2%=== 每个点分段小于255并大于0 ,不接受.000.这样的格式 ===%for /f "delims=. tokens=1-4" %%a in ('echo %ip%') do (set ip_a=%%aset a_len=!ip_a:~1!if defined a_len echo !ip_a! |findstr "^0" >nul 2>nul && exit /b 2if not %%a leq 255 (exit /b 2) else ( if not %%a geq 0 (exit /b 2))set ip_b=%%bset b_len=!ip_b:~1!if defined b_len echo !ip_b! |findstr "^0" >nul 2>nul && exit /b 2if not %%b leq 255 (exit /b 2) else ( if not %%b geq 0 (exit /b 2))set ip_c=%%cset c_len=!ip_c:~1!if defined c_len echo !ip_c! |findstr "^0" >nul 2>nul && exit /b 2if not %%c leq 255 (exit /b 2) else ( if not %%c geq 0 (exit /b 2))set ip_d=%%dset d_len=!ip_d:~1!if defined d_len echo !ip_d! |findstr "^0" >nul 2>nul && exit /b 2if not %%d leq 255 (exit /b 2) else ( if not %%d gtr 0 (exit /b 2)))goto :eof:mainecho.%=== 显示IP样式为\\1.1.1.1格式 ===%if %ip:~0,2% equ \\ (echo 你的ip地址是%ip%) else (echo 你的ip地址是\\%ip%)echo.echo 按任意键退出pause >nul 2>nulexit
以上是使用点分十进制格式的ip作为输入规范,不符合此格式的则要求重新输入。
在实际中,我通常是把这个验证输入的过程做为单独的bat文件模块,通过call外部文件来调用,而不是所有脚本都写在主程序(如命名为main.bat)里。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~