0

我有一批要求提供一些信息,所以我决定使用命令 set /p "var=" ,但我想先做一些操作或限制

  1. 如果我想询问日期set /p "DATE=insert date like this 2012/07/15=",我只想在输入以这种方式 2012/07/15 的情况下接受答案

2.如果我想询问优惠券号码set /p "NUMBER=insert number=",我想做 IF THE CODE FIRST CHARACTER WAS Z THEN NUMBER=NUMBER IGNORING Z ,例如如果用户插入 z12345 我想要 NUMBER=12345 ,所以我做了这半个IF '%var:~0,1%'=='z' then ??? 命令我不知道怎么做剩下的

我还注意到,如果我想做第 4 个字符,这是行不通的IF '%var:~4,1%'=='g',为什么?

4

4 回答 4

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
)
于 2012-06-26T08:38:29.617 回答
1

这篇文章中,解释了一种编写您自己的“SET /P”例程的方法,因此您可以对其进行修改以满足您的特定需求。请注意,这不是读取字符串后的测试,而是在读取字符串时处于活动状态的交互式测试。您甚至可以限制用户必须完成输入的时间!

查找“3 -GetKey.exe.hex ”辅助程序,然后查找“Readline 子程序”。

我希望它有所帮助。

安东尼奥

于 2012-06-26T20:00:55.500 回答
0

您可以将 ReadFormattedLine 子例程用于所有类型的格式化输入。例如,下面的命令读取日期格式的一行;当用户键入字符时,斜线会自动插入:

call :ReadFormattedLine myDate="####/##/##" /M "insert date like this 2012/07/15: "

下面的命令读取一个由 5 位数字组成的数字;该子例程不接受非数字字符:

call :ReadFormattedLine NUMBER="#####" /M "insert number: "

这个子程序是用纯 Batch 编写的,因此它不需要任何额外的程序,并且它允许多种格式化输入操作,例如读取密码。您可以从Read a line with specific format下载它。

于 2014-07-16T21:31:17.327 回答
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,尽管您可能会发现这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%
于 2012-06-26T09:02:34.783 回答