设置/ p忽略大写字母

时间:2011-10-25 05:37:06

标签: batch-file

有没有办法(通过标记或其他方式)在批处理脚本中使用Set /p ignore大写字母?

5 个答案:

答案 0 :(得分:3)

或者,根据您计划对用户输入执行的操作,如果要在decaceion中使用它,则可以使用/I命令的IF开关。请参阅HELP IF

Set /P TEXT=Choose an option: 
IF /I %TEXT%==A ( echo DOA
) ELSE ( IF /I %TEXT%==B ( echo DOB
) ELSE ( IF /I %TEXT%==C ( echo DOC
) ELSE ( echo DONOTHING  )))

答案 1 :(得分:3)

大写到小写:

@echo off
:main
cls
set str=
set /p str=    input(Press enter to exit):
if not defined str exit
cls
echo.
echo            Before:"%str%"
for %%i 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) do call set str=%%str:%%i=%%i%%
echo ____________________________________________
echo.
echo            After:"%str%"
echo.
echo      Press Any Key To Convert again
pause>nul
goto main

答案 2 :(得分:2)

如果我们编写自己的readline例程,set /P命令的所有输入限制(包括此命令)都可以解决。这是基本版本:

@echo off
rem Insert next line if needed:
SETLOCAL DISABLEDELAYEDEXPANSION
set exclam=!
set caret=^^
setlocal EnableDelayedExpansion
set ascii=01234567890123456789012345678901^
 !exclam!^"#$%%^&'()*+,-./0123456789:;^<=^>?^
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]!caret!^_^
`abcdefghijklmnopqrstuvwxyz{^|}~
for /F %%a in ('echo prompt $H ^| cmd') do set BS=%%a
set lineread=
:nextkey
    getakey
    set code=%errorlevel%
    if %code% lss 32 goto checkBS
:ascii
    set char=!ascii:~%code%,1!
    colormsg 7 "!char!"
    set lineread=!lineread!!char!
    goto nextkey
:checkBS
if not %code% == 8 goto checkExtended
    if "!lineread!" == "" goto nextkey
    colormsg 7 "%BS% %BS%"
    set lineread=!lineread:~0,-1!
    goto nextkey
:checkExtended
if not %code% == 0 goto checkCR
    getakey
    goto nextkey
:checkCR
if not %code% == 13 goto nextkey
echo/

ECHO Line Read: [!lineread!]

例如,如果要忽略输入上的大写字母,只需在:ascii标签后插入这两行:

:ascii
    rem If key is between A (65) and Z (90): ignore it
    if %code% geq 65 if %code% leq 90 goto nextkey

将大写字母转换为小写字母:

:ascii
    rem If key is upcase (between A-65 and Z-90): convert it to lowcase (a-97 z-122)
    if %code% geq 65 if %code% leq 90 set /A code+=32

我们甚至可以编写一个异步(并发)readline例程,允许批处理文件在读取行的同时继续运行。

以前在这个问题中给出了GETAKEY.COM和COLORMSG.COM程序:Batch Color per line

答案 3 :(得分:1)

我不知道忽略,但您可以将它们转换为小写。

Set /P Text=Please type something: 
Set Text=%Text:A=a%
Set Text=%Text:B=b%
Set Text=%Text:C=c%
...
Echo %Text%

如果您想使用For命令转换为小写:

Set Text /P=Please type something: 
For %%i In ("A=a" "B=b" "C=c" ...) Do Call Set "Text=%%Text:%%~i%%"
Echo %Text%

或将"A=a"替换为"A="等,以删除大写字母。

答案 4 :(得分:1)

Rob的救援网站:以下是批量案例转换的fleshed-out examples