У меня есть пакетный скрипт, где требуется пользовательский ввод. Однако я хочу разрешить только a-z, 0-9, @#$].~+-=_/\:; , Есть ли способ использовать findstr, чтобы убедиться, что нет других символов, кроме этих? Я проверил документацию и не могу найти способ сделать это.

Что я имею:

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

1 ответ1

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 символы <|>& отражаются без кавычек, они могут разбить партию.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .