批处理文件:用户输入操作

时间:2012-06-26 08:28:59

标签: batch-file

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

  1. 如果我想要约会set /p "DATE=insert date like this 2012/07/15=",我只想在输入是这样的时候接受答案2012/07/15
  2. 2.如果我想要优惠券编号set /p "NUMBER=insert number=",我想做的是如果代码第一个字符是那么数字=数字忽略Z,例如如果用户插入z12345 我想要NUMBER = 12345,所以我做了这个命令的一半IF '%var:~0,1%'=='z' then ??? 所以我不知道怎么做其余的

    我也注意到,如果我想做第4个charcetr,这不会工作IF '%var:~4,1%'=='g',为什么?

4 个答案:

答案 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下载。