我有一个要求提供一些信息的批处理所以我决定使用命令set / p“var =”,但我想做一些操作或限制,所以首先
set /p "DATE=insert date like this 2012/07/15="
,我只想在输入是这样的时候接受答案2012/07/15 2.如果我想要优惠券编号set /p "NUMBER=insert number="
,我想做的是如果代码第一个字符是那么数字=数字忽略Z,例如如果用户插入z12345
我想要NUMBER = 12345,所以我做了这个命令的一半IF '%var:~0,1%'=='z' then ???
所以我不知道怎么做其余的
我也注意到,如果我想做第4个charcetr,这不会工作IF '%var:~4,1%'=='g'
,为什么?
答案 0 :(得分:2)
您可以使用findstr /R
使用正则表达式检查输入。
像
这样的东西setlocal EnableDelayedExpansion
set "myDate="
set /p myDate=
if defined myDate (
echo !myDate! | findstr /R "^[0123456789][0123456789][0123456789][0123456789]/[0123456789][0123456789]/[0123456789][0123456789]" >nul && Echo ok || echo fail
)
答案 1 :(得分:1)
在this post解释了编写自己的“SET / P”例程的方法,因此您可以修改它以满足您的特定需求。请注意,这不是读取字符串后的测试,而是在读取字符串时处于活动状态的交互式测试。您甚至可以限制用户完成输入的时间!
寻找“3- GetKey.exe.hex ”辅助程序,然后寻找“Readline子程序”。
我希望它有所帮助。
安东尼奥
答案 2 :(得分:0)
以下脚本显示了如何执行这两项任务:
@setlocal enableextensions enabledelayedexpansion
@echo off
set /p "dt=Enter date as yyyy/mm/dd: "
set rc=1
echo x%dt%x| findstr /r "^x[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]x$" >nul: && set rc=0
if %rc%==1 (
echo Invalid date
goto :endl
)
echo Date was %dt%
set /p "num=Enter number as z99999 or 99999: "
if %num:~0,1%==xz set num=!num:~1!
echo Number was %num%
:endl
endlocal
第一部分展示了如何使用findstr
及其正则表达式功能来设置rc
返回代码变量,然后可以对其进行检查。
第二部分展示了如何从字符串z
剥离第一个charcater,尽管你可能会发现findstr
在那里也很有用,所以你可以检查整个字符串,像:
set /p "num=Enter number as z99999 or 99999: "
if %num:~0,1%==xz set num=!num:~1!
set rc=1
echo x%num%x| findstr /r "^x[0-9][0-9][0-9][0-9][0-9]x$" >nul: && set rc=0
if %rc%==1 (
echo Invalid number
goto :endl
)
echo Number was %num%
答案 3 :(得分:0)
您可以对所有类型的格式化输入使用ReadFormattedLine子例程。例如,下面的命令读取日期格式的行;当用户键入字符时,会自动插入斜杠:
call :ReadFormattedLine myDate="####/##/##" /M "insert date like this 2012/07/15: "
以下命令读取由5位数字组成的数字;子程序不接受不是数字的字符:
call :ReadFormattedLine NUMBER="#####" /M "insert number: "
这个子程序是用纯批处理编写的,所以它不需要任何额外的程序,它允许几个格式化的输入操作,如读取密码。您可以从Read a line with specific format下载。