如何使用findstr排除Batch中特殊字符的输入?
How to exclude the input of special characters in Batch using findstr?
我正在编写 Batch 游戏,但遇到了一些困难。我正在创建一个角色,玩家可以输入他们选择的名字。我正在尝试使用 findstr
命令检测他们是否输入了特殊字符。我一直在四处寻找,但该网站上的所有其他修复程序都对我不起作用。我在批处理方面不是很先进,所以最好是一个简单的答案,否则将不胜感激详细的解释。启用延迟扩展。
这是我的代码。
:charactername
cls
echo We know your Username is !username!, but what will your character's name be?
echo.
set /p character="Type a character name.> "
if "!character!"=="" (
echo Please type a valid name.
timeout 3 /nobreak > nul
goto charactername
)
echo !character! | findstr /R " ^^! @ # $ %% ^ && * ) ( _ = + \] \[ } { \ | ; : "" < > ^, \. / ? ^` ~ 1 2 3 4 5 6 7 8 9 0" 2>nul
if %errorlevel%==0 (
cls
echo Please do not use any special characters or numbers for your character's name.
echo Only - and ' are accepted.
timeout 5 /nobreak > nul
goto charactername
) else (
goto nameconfirm
)
这是我希望每个部分做的。
if "!character!"==""
检测玩家是否未输入任何内容。这工作正常。
echo !character! | findstr /R " ^^! @ # $ %% ^ && * ) ( _ = + \] \[ } { \ | ; : "" < > ^, \. / ? ^` ~ 1 2 3 4 5 6 7 8 9 0" 2>nul
:我希望此部分检测玩家是否输入了这些字符中的任何一个。我不确定这个命令的格式是否正确;请指教
if %errorlevel%==0
:根据我对 Whosebug 的其他研究,显然我可以使用它来检测 findstr
命令是否找到任何特殊字符。我也尝试过使用 if %errorlevel%==1
。这里的问题是,如果我使用第一个选项,它会跳到 else
部分,而不考虑特殊字符。如果我检测错误级别是否为 1,它不允许任何内容通过,显示我写的错误消息。
一种选择是使用 FOR /F
命令并使用字母表中的所有字符作为分隔符。如果 FOR
命令输出任何数据,那么您就知道它们不只使用字母字符。
for /F "delims=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" %%G IN ("%character%") Do IF NOT "%%~G"=="" @ECHO Bad Character Name
我正在编写 Batch 游戏,但遇到了一些困难。我正在创建一个角色,玩家可以输入他们选择的名字。我正在尝试使用 findstr
命令检测他们是否输入了特殊字符。我一直在四处寻找,但该网站上的所有其他修复程序都对我不起作用。我在批处理方面不是很先进,所以最好是一个简单的答案,否则将不胜感激详细的解释。启用延迟扩展。
这是我的代码。
:charactername
cls
echo We know your Username is !username!, but what will your character's name be?
echo.
set /p character="Type a character name.> "
if "!character!"=="" (
echo Please type a valid name.
timeout 3 /nobreak > nul
goto charactername
)
echo !character! | findstr /R " ^^! @ # $ %% ^ && * ) ( _ = + \] \[ } { \ | ; : "" < > ^, \. / ? ^` ~ 1 2 3 4 5 6 7 8 9 0" 2>nul
if %errorlevel%==0 (
cls
echo Please do not use any special characters or numbers for your character's name.
echo Only - and ' are accepted.
timeout 5 /nobreak > nul
goto charactername
) else (
goto nameconfirm
)
这是我希望每个部分做的。
if "!character!"==""
检测玩家是否未输入任何内容。这工作正常。
echo !character! | findstr /R " ^^! @ # $ %% ^ && * ) ( _ = + \] \[ } { \ | ; : "" < > ^, \. / ? ^` ~ 1 2 3 4 5 6 7 8 9 0" 2>nul
:我希望此部分检测玩家是否输入了这些字符中的任何一个。我不确定这个命令的格式是否正确;请指教
if %errorlevel%==0
:根据我对 Whosebug 的其他研究,显然我可以使用它来检测 findstr
命令是否找到任何特殊字符。我也尝试过使用 if %errorlevel%==1
。这里的问题是,如果我使用第一个选项,它会跳到 else
部分,而不考虑特殊字符。如果我检测错误级别是否为 1,它不允许任何内容通过,显示我写的错误消息。
一种选择是使用 FOR /F
命令并使用字母表中的所有字符作为分隔符。如果 FOR
命令输出任何数据,那么您就知道它们不只使用字母字符。
for /F "delims=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" %%G IN ("%character%") Do IF NOT "%%~G"=="" @ECHO Bad Character Name