Установив / p игнорировать заглавные буквы в пакете - PullRequest
0 голосов
/ 25 октября 2011

Есть ли способ (с помощью тега или иным способом) иметь Set /p ignore заглавные буквы в пакетном скрипте?

Ответы [ 5 ]

3 голосов
/ 05 ноября 2011

от верхнего до нижнего регистра:

@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
3 голосов
/ 25 октября 2011

В качестве альтернативы, и в зависимости от того, что вы планируете делать с пользовательским вводом, если вы хотите использовать его при принятии решения, вы можете использовать переключатель /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  )))
2 голосов
/ 02 ноября 2011

Все входные ограничения команды set /P, включая эту, могут быть устранены, если мы напишем нашу собственную подпрограмму readline.Это базовая версия:

@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 label:

: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

Мы можем даже написать асинхронную (одновременную) процедуру чтения строки, которая позволяет пакетному файлу продолжать работать одновременно с чтением строки.

Оба GETAKEY.Программы COM и COLORMSG.COM ранее задавались в этом вопросе: Пакетный цвет на строку

1 голос
/ 28 октября 2011

Сайт Роба на помощь: вот несколько выделенных примеров конверсии пакетного случая.

1 голос
/ 25 октября 2011

Я не знаю о игнорировании, но вы можете преобразовать их в нижний регистр.

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=" и т. Д., Чтобы удалить заглавные буквы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...