Batch file .bat文件仅接受字母,且仅限6个字符

Batch file .bat文件仅接受字母,且仅限6个字符,batch-file,Batch File,我需要下面的脚本只接受字母,最多允许06个字符,是否可以使用.bat进行验证 @Echo Off SetLocal EnableDelayedExpansion :Menu ClS Color 0A Date /T Time /T Echo( Echo Computador: %ComputerName% Usuario logado: %UserName% Echo ======================== Echo * 1. PRODUCTION PASSWORD

我需要下面的脚本只接受字母,最多允许06个字符,是否可以使用.bat进行验证

@Echo Off
SetLocal EnableDelayedExpansion

:Menu
ClS
Color 0A
Date /T
Time /T
Echo(
Echo Computador: %ComputerName%        Usuario logado: %UserName%

Echo  ========================
Echo * 1. PRODUCTION PASSWORD *
Echo * 2. TEST PASSWORD       *
Echo * 3. EXIT                * 
Echo  ========================

Echo(
"%__AppDir__%choice.exe" /C 123 /N /M "CHOOSE ONE OF THE OPTIONS:"
GoTo opcao%ErrorLevel% 2>NUL||GoTo opcao4
echo.

:opcao1
@echo off
echo ====================================================================
echo.
set /p "login=Enter your login: "
%login:~6%
将检查最大长度为6,正则表达式仅检查字母。如果这些测试中的任何一个都没有失败,它将完成回显“OK”和暂停。此代码将因大多数特殊字符而崩溃。有关要处理的问题,请参见以下内容:

@echo off
setlocal enabledelayedexpansion
echo ====================================================================
echo.
:enterlogin
set /P "login=Enter your login: %=%"

echo.!login!| findstr /R "[^a-zA-Z]" >nul 2>&1
if ErrorLevel 1 (
 if not "!login:~6!"=="" (
  echo !login! - 6 CHARACTERS OR LESS
  goto enterlogin
 )  
 echo !login! - OK
) ELSE (
 echo !login! - LETTERS ONLY
 goto enterlogin
)
echo OK
pause

为了全面验证

:opcao1
@echo off
echo ====================================================================
echo.
:enterlogin
set /P login=Enter your login: %=%

:: REM block quotes

SET login | FIND """" >NUL
IF NOT ERRORLEVEL 1 SET login=

IF NOT DEFINED login GOTO invlogin

:: REM Block tilde

SET login | FIND "~" >NUL
IF NOT ERRORLEVEL 1 SET login=

IF NOT DEFINED login GOTO invlogin

:: REM Test for Spaces (REM out if not required)

IF NOT "%login%"=="%login: =%" GOTO invlogin

:: REM Test for all other standard Symbols. (REM out any you wish to permit)

IF NOT "%login%"=="%login:&=%" GOTO invlogin
IF NOT "%login%"=="%login:(=%" GOTO invlogin
IF NOT "%login%"=="%login:)=%" GOTO invlogin
IF NOT "%login%"=="%login:<=%" GOTO invlogin
IF NOT "%login%"=="%login:>=%" GOTO invlogin
IF NOT "%login%"=="%login:{=%" GOTO invlogin
IF NOT "%login%"=="%login:}=%" GOTO invlogin
IF NOT "%login%"=="%login:]=%" GOTO invlogin
IF NOT "%login%"=="%login:[=%" GOTO invlogin
IF NOT "%login%"=="%login:#=%" GOTO invlogin
IF NOT "%login%"=="%login:^=%" GOTO invlogin
IF NOT "%login%"=="%login:+=%" GOTO invlogin
IF NOT "%login%"=="%login:-=%" GOTO invlogin
IF NOT "%login%"=="%login:/=%" GOTO invlogin
IF NOT "%login%"=="%login:\=%" GOTO invlogin
IF NOT "%login%"=="%login:|=%" GOTO invlogin
IF NOT "%login%"=="%login:$=%" GOTO invlogin
IF NOT "%login%"=="%login:!=%" GOTO invlogin
IF NOT "%login%"=="%login:?=%" GOTO invlogin
IF NOT "%login%"=="%login:@=%" GOTO invlogin
IF NOT "%login%"=="%login:'=%" GOTO invlogin
IF NOT "%login%"=="%login:,=%" GOTO invlogin
IF NOT "%login%"=="%login:.=%" GOTO invlogin
IF NOT "%login%"=="%login:;=%" GOTO invlogin
IF NOT "%login%"=="%login:`=%" GOTO invlogin

:: REM Test length

IF NOT "%login:~6%"=="" GOTO invlogin

:: REM Block Numbers

Setlocal enableDelayedExpansion
FOR %%a in (0,1,2,3,4,5,6,7,8,9) DO (
IF NOT "%login%"=="!login:%%a=!" GOTO invlogin
)

ECHO login succesful.
pause
goto enterlogin

:: REM rest of your program here.

:invlogin
echo "%login%" - LETTERS ONLY AND LESS THAN 6 CHARACTERS
pause
goto enterlogin
:opcao1
@回音
回音====================================================================
回声。
:enterlogin
set/P login=输入您的登录:%=%
::REM块引号
设置登录名|查找“”>NUL
如果不是错误级别1,则设置登录=
如果未定义登录,则转到invlogin
::REM块瓷砖
设置登录|查找“~”>NUL
如果不是错误级别1,则设置登录=
如果未定义登录,则转到invlogin
::空间REM测试(如果不需要,REM out)
如果不是“%login%”==%login:=%转到invlogin
::所有其他标准符号的REM测试。(删除任何您希望允许的内容)
如果不是“%login%”==%login:&=%GOTO invlogin
如果不是“%login%”==%login:(=%转到invlogin
如果不是“%login%”==%login:)=%转到invlogin
如果不是“%login%”==%login:=%转到invlogin
如果不是“%login%”==%login:{=%”转到invlogin
如果不是“%login%”==“%login:}=%”转到invlogin
如果不是“%login%”==%login:=%GOTO invlogin
如果不是“%login%”==%login:[=%”转到invlogin
如果不是“%login%”==%login:#=%”转到invlogin
如果不是“%login%”==%login:^=%GOTO invlogin
如果不是“%login%”==%login:+=%转到invlogin
如果不是“%login%”==%login:-=%GOTO invlogin
如果不是“%login%”==%login:/=%GOTO invlogin
如果不是“%login%”==“%login:\=%”转到invlogin
如果不是“%login%”==%login:|=%”转到invlogin
如果不是“%login%”==“%login:$=%”转到invlogin
如果不是“%login%”==“%login:!=%”转到invlogin
如果不是“%login%”==“%login:?=%”转到invlogin
如果不是“%login%”==“%login:@=%”转到invlogin
如果不是“%login%”==%login:“=%”转到invlogin
如果不是“%login%”==%login:,=%转到invlogin
如果不是“%login%”==%login:.=%转到invlogin
如果不是“%login%”==%login:;=%转到invlogin
如果不是“%login%”==%login:`=%GOTO invlogin
::REM测试长度
如果不是“%login:~6%”==“转到invlogin”
::REM区块编号
Setlocal enableDelayedExpansion
对于(0,1,2,3,4,5,6,7,8,9)中的%%a,请执行以下操作(
如果不是“%login%”==“!login:%%a=!”转到invlogin
)
ECHO登录成功。
暂停
转到登录
::在这里快速移动程序的其余部分。
:invlogin
回显“%login%”-仅限字母且少于6个字符
暂停
转到登录

1)此代码可以通过在(1,2,3)循环中使用%%@的
来限制操作/登录的输入

2)获取输入长度和显示的字母总数

3)连接输入长度+存在的字母(端到端连接字符串)

4)使用预测字符串并检查输入:

  • 例如:
rem for/f获取变量长度+变量中存在的字母总数:
如果输入=1,1个字符,长度=1个字母=0
如果输入==a2,2个字符,长度==2个字母==1
如果输入==ab5,3个字符,长度==3个字母==2
如果输入==abc4,4个字符,长度==4个字母==3
如果输入==abcd5,5个字符,长度==5个字母==4
如果输入==abcde6,6个字符,长度==6个字母==5

  • 一个有效的预测字符串,其中我得到了可变长度

    并与总字母连接(长度+变量中存在的总字母)


如果输入==a,1个字符和字符串长度==1个字母==1个凹面==11有效!
如果输入==ab,则2个字符和字符串长度==2个字母==2个凹面==22有效!
如果输入==abc,则3个字符和字符串长度==3个字母==3个凹面==33有效!
如果输入==abcd,则4个字符和字符串长度==4个字母==4个凹面==44有效!
如果输入==abcde,则5个字符和字符串长度==5个字母==5个凹面==55有效!
如果输入==abcdef,则6个字符和字符串长度==6个字母==6个凹面==66有效!

  • 仅当输入只有字母时进行验证,我们的长度等于变量中字母出现的次数:
如果“%%h%%i”==任何(11,22,33,44,55,66)转到:下一步
|a | ab | abc | abcd | abcde | abcdef|
11   22    33     44      55       66
^^
||
|:==>%%i变量中的字母出现次数:1个字母出现次数
|
:=>%%h变量的总长度:长度为1
  • 使用循环中的预测字符串来验证输入长度,最大为6个字母,并且仅验证
    字母
    ,如果匹配,则添加操作。
for%%#in(112233445566)do echo/%%h%%i | findstr/lb“%%#”>nul和goto:下一步

Q59709952.cmd


@echo off&&setlocal enabledelayedexpansion&&break off
cls和标题错误:输入的字符数必须不超过06个,并且只能是字母
echo=-^>按任意键继续^!!&&%\uuuuuuuuuuuuuuuuu%timeout-1>nul
如果%%@eq 3 echo/-^>[!input!-输入无效^]&endlocal&goto:EOF
) 
颜色80&&set“\u t=!time:~0,5!”&&for/f^tokens^=^1^delims^=^.%%i in('
%__APPDIR_uu%wbem\wmic.exe OS Get localdatetime^ | findstr[0-9]”是否设置“_dt=%%~i”
设置“\u data=!\u dt:~6,2!/!\u dt:~4,2!/!\u dt:~0,4!!\u t:=0!”&&cls&echo/&echo/
echo=^|计算机管理员:[%computername%]Usuario logado:[%username%]
设置/p“输入=^ |!| b!^ |[0%%@/02]!_数据!输入您的登录名:
回声/-----------------------------------------------------

对于/f%%h in('cmd/u/s/v/c set/p“=!输入:=!”^代码成功进行字符串长度测试,数值测试失败block@T3RR0R什么数字块?仍然允许数字输入password@T3RR0Roops是的,我做了一个编辑,使事情更加精简,但实际上它跳过了逻辑。现在修复并改进了。失败了,请尝试登录
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
:opcao1
@echo off
echo ====================================================================
echo.
:enterlogin
set /P login=Enter your login: %=%

:: REM block quotes

SET login | FIND """" >NUL
IF NOT ERRORLEVEL 1 SET login=

IF NOT DEFINED login GOTO invlogin

:: REM Block tilde

SET login | FIND "~" >NUL
IF NOT ERRORLEVEL 1 SET login=

IF NOT DEFINED login GOTO invlogin

:: REM Test for Spaces (REM out if not required)

IF NOT "%login%"=="%login: =%" GOTO invlogin

:: REM Test for all other standard Symbols. (REM out any you wish to permit)

IF NOT "%login%"=="%login:&=%" GOTO invlogin
IF NOT "%login%"=="%login:(=%" GOTO invlogin
IF NOT "%login%"=="%login:)=%" GOTO invlogin
IF NOT "%login%"=="%login:<=%" GOTO invlogin
IF NOT "%login%"=="%login:>=%" GOTO invlogin
IF NOT "%login%"=="%login:{=%" GOTO invlogin
IF NOT "%login%"=="%login:}=%" GOTO invlogin
IF NOT "%login%"=="%login:]=%" GOTO invlogin
IF NOT "%login%"=="%login:[=%" GOTO invlogin
IF NOT "%login%"=="%login:#=%" GOTO invlogin
IF NOT "%login%"=="%login:^=%" GOTO invlogin
IF NOT "%login%"=="%login:+=%" GOTO invlogin
IF NOT "%login%"=="%login:-=%" GOTO invlogin
IF NOT "%login%"=="%login:/=%" GOTO invlogin
IF NOT "%login%"=="%login:\=%" GOTO invlogin
IF NOT "%login%"=="%login:|=%" GOTO invlogin
IF NOT "%login%"=="%login:$=%" GOTO invlogin
IF NOT "%login%"=="%login:!=%" GOTO invlogin
IF NOT "%login%"=="%login:?=%" GOTO invlogin
IF NOT "%login%"=="%login:@=%" GOTO invlogin
IF NOT "%login%"=="%login:'=%" GOTO invlogin
IF NOT "%login%"=="%login:,=%" GOTO invlogin
IF NOT "%login%"=="%login:.=%" GOTO invlogin
IF NOT "%login%"=="%login:;=%" GOTO invlogin
IF NOT "%login%"=="%login:`=%" GOTO invlogin

:: REM Test length

IF NOT "%login:~6%"=="" GOTO invlogin

:: REM Block Numbers

Setlocal enableDelayedExpansion
FOR %%a in (0,1,2,3,4,5,6,7,8,9) DO (
IF NOT "%login%"=="!login:%%a=!" GOTO invlogin
)

ECHO login succesful.
pause
goto enterlogin

:: REM rest of your program here.

:invlogin
echo "%login%" - LETTERS ONLY AND LESS THAN 6 CHARACTERS
pause
goto enterlogin