尝试创建一个只允许字母,数字和下划线的基本用户名检查..其他任何内容都应该再次提示用户输入...
老实说,我试图找到一些更好的解释和使用DOS .bat文件和findstr做这样的事情的例子,以下代码不起作用,仍然允许符号如)(& ^ “要与其他允许的字符输入%...
:setname
set /P username=Enter Username: %=%
echo.%username% | findstr /R "[a-zA-Z0-9_]" >nul 2>&1
if not ErrorLevel 1 (
echo %username%
goto :proceed
)
goto :setname
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL
:setname
SET "usrname="
set /P usrname=Enter Username: %=%
IF NOT DEFINED usrname GOTO :eof
echo.%usrname%| findstr /R "[^a-zA-Z0-9_]" >nul 2>&1
if ErrorLevel 1 (
echo %usrname% - OK
) ELSE (
echo %usrname% - invalid
)
goto :setname
两个基本错误:
首先,您需要找到任何不是a..zA..Z0..9
的字符第二,您需要echo
SPACE
findstr
space
,set /p
始终无效
请注意,USERNAME
未在ENTER上将var设置为[nothing] - 它保持var不变,因此您可以将用户名设置为默认值。
SET
是一个神奇的变量 - 由系统实例化。逻辑变量名,但是许多预设中的一个是不明智的。尝试从新会话中的提示执行{{1}}以获取部分列表...
答案 1 :(得分:1)
@echo off
:input
set "in="
set /p "in=Enter username: "
for /f "delims=1234567890abcdefghijklmnopqrstuvwxyz" %%a in ("%in%") do goto :input
echo "%in%"