У меня есть пакетный скрипт, где требуется пользовательский ввод. Однако я хочу разрешить только a-z, 0-9, @#$].~+-=_/\:;
. Есть ли способ использовать findstr, чтобы убедиться, что нет других символов, кроме этих? Я проверил документацию и не могу понять, как это сделать.
Что у меня есть:
@echo off
echo Enter Username:
set /p usr=">"
решение1
Используйте режим регулярных выражений findstr по умолчанию и используйте [characterclass], экранируя символы со специальным значением с помощью обратной косой черты.
:: 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
символы <|>&
выводятся без кавычек, они могут нарушить пакет.