пакетный код для проверки, содержит ли скрипт что-либо, кроме букв и цифр

Мне было интересно, можно ли проверить переменную, чтобы увидеть, содержит ли она что-либо, кроме букв и цифр? Мне нужно иметь это, чтобы ограничить спецификации имени пользователя. У меня есть своего рода пример сценария ниже.

 :top
echo enter a name
set /p name=">"
If contains (Anything other than letters/numbers/dashes) echo Invalid Name. & goto top
echo thank you!
pause

Спасибо всем!

Редактировать: я думаю, что это, вероятно, дубликат, однако я не знаю, что искать, чтобы найти другие сообщения... Всякий раз, когда я искал что-либо, связанное с моим вопросом, он вызывал поиск и замену в текстовых файлах или что-то еще несвязанный. Если кто-то может найти дубликат, пожалуйста, дайте мне знать, и я закрою этот вопрос. Спасибо.


person Mark Deven    schedule 07.11.2017    source источник
comment
Мне нравится ваше редактирование... но маловероятно, что это дубликат. Дубликаты действительно должны быть одним и тем же вопросом. Вы должны обратить внимание на проверку ключевого слова. как здесь stackoverflow.com/questions/20414027/   -  person Harry    schedule 07.11.2017
comment
@Harry, спасибо, Гарри, приятно слышать это хоть раз... Я думаю, что многие другие люди не понимают этого ключевого слова, возможно, персоналу следует еще раз обсудить это со всеми. спрашивать об ошибках с PHP-скриптами ужасно, потому что они всегда указывают на тот, который немного связан с любым вопросом. Спасибо.   -  person Mark Deven    schedule 08.11.2017
comment
ну, на самом деле довольно сложно идентифицировать дубликат и в первую очередь основываться на мнении. Если вы не хотите, чтобы какой-то вопрос был помечен как дубликат, вы должны вставить ссылку на аналогичный вопрос и указать, в чем разница между вашим и связанным вопросом. Это показывает, что вы потратили некоторое время на поиск самостоятельно, что является обязательным для любого вопроса. доказательство исследования   -  person Harry    schedule 08.11.2017
comment
@ Гарри, я не подумал добавить ссылку, спасибо.   -  person Mark Deven    schedule 09.11.2017


Ответы (2)


Это позволяет использовать только буквы, цифры и тире:

@echo off & setlocal

:top
set /P "name="Enter a name: "
setlocal enabledelayedexpansion
echo(!name!| findstr /i "[^a-z0-9-]" >NUL && (
    endlocal
    set /P "=Invalid name. " <NUL
    goto top
)

endlocal
echo Thank you %name%!
pause
person rojo    schedule 07.11.2017

Это работает для большинства символов ascii. У него могут быть некоторые оговорки.

@echo off
set /p "name=Enter a name>"
set "test=%name%"
FOR %%G IN ( a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 ) do (
    IF DEFINED test call set "test=%%test:%%G=%%"
)
IF DEFINED test (
    echo Invalid characters in username:"%test%"
) else (
    echo Good Username: "%name%"
)
pause
person Squashman    schedule 07.11.2017
comment
Рохо был немного более сжатым, поэтому я использовал его, однако мне нравится простая настройка вашего сценария. Спасибо. - person Mark Deven; 08.11.2017