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番目のcharcetrを実行したい場合、これが機能しないことに気付きました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

次のスクリプトは、これらの両方のタスクを実行する方法を示しています。

    @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戻りコード変数を設定する方法を示します。この変数は後で確認できます。

2 番目のセクションでは、文字列が である場合に、文字列から最初の文字を削除する方法を示し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 に答える
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 に答える