findstr テストに指定されたバッチ以外の文字が含まれているかどうか

findstr テストに指定されたバッチ以外の文字が含まれているかどうか

ユーザー入力が必要なバッチ スクリプトがあります。ただし、許可したいのは だけですa-z, 0-9, @#$].~+-=_/\:;。findstr を使用して、それ以外の文字がないことを確認する方法はありますか? ドキュメントを確認しましたが、これを実行する方法がわかりません。

私が持っているもの:

@echo off
echo Enter Username:
set /p usr=">"

答え1

findstr のデフォルトの正規表現モードを使用し、[文字クラス] を使用して、特別な意味を持つ文字をバックスラッシュでエスケープします。

:: Q:\Test\2018\12\07\SU_1381655.cmd
@Echo off
:loop
set /p "input=Enter data(a-z, 0-9, @#$].~+-=_/\:;.:)"

Echo:%input%|findstr /I "^[a-z0-9@#$\]\.~+\-=_\/\\:;]*$" >NUL 2>&1 && (
   echo checked input ok
) || (
   echo invalid input
)
goto :loop

すべての文字が正しいかどうかを確認してください。
小文字のみを意図している場合は、/i スイッチを削除してください。


可能なpoisenous文字<|>&は引用符なしでエコーされるため、バッチが壊れる可能性があります。

関連情報