Как заставить ввод быть в верхнем регистре в пакетном файле? [Дубликат]

Использование Underscore.js's _.each :

_.each(validation_messages, function(value, key){
    _.each(value, function(value, key){
        console.log(value);
    });
});

4
задан alroc 11 January 2016 в 04:45
поделиться

4 ответа

Самый короткий путь (без необходимости загрузки сторонних разработчиков) - использовать PowerShell.

set "str=The quick brown fox"
for /f "usebackq delims=" %%I in (`powershell "\"%str%\".toUpper()"`) do set "upper=%%~I"

Более быстрый способ, но при использовании меньшего кода, чем любое чистое пакетное решение, - это использовать WSH.

@if (@CodeSection == @Batch) @then
@echo off & setlocal

set "str=The quick brown fox"
for /f "delims=" %%I in ('cscript /nologo /e:JScript "%~f0" "%str%"') do set "upper=%%~I"
set upper
goto :EOF

@end // end Batch / begin JScript hybrid
WSH.Echo(WSH.Arguments(0).toUpperCase());

И, конечно, вы можете легко сделать любую функцию, чтобы вы могли call ее несколько раз по мере необходимости.

@if (@CodeSection == @Batch) @then
@echo off & setlocal

call :toUpper upper1 "The quick brown fox"
call :toUpper upper2 "jumps over the lazy dog."
set upper
goto :EOF

:toUpper <return_var> <str>
for /f "delims=" %%I in ('cscript /nologo /e:JScript "%~f0" "%~2"') do set "%~1=%%~I"
goto :EOF

@end // end Batch / begin JScript hybrid
WSH.Echo(WSH.Arguments(0).toUpperCase());

Или, если вы хотите быть на самом деле это может быть неприятно, вы можете злоупотреблять сообщением об ошибке команды tree следующим образом:

@echo off & setlocal

set upper=
set "str=Make me all uppercase!"
for /f "skip=2 delims=" %%I in ('tree "\%str%"') do if not defined upper set "upper=%%~I"
set "upper=%upper:~3%"
echo %upper%
11
ответ дан rojo 25 August 2018 в 05:58
поделиться
@ECHO Off
SETLOCAL
SET "betabet=abcdefghijklmnopqrstuvwxyz1234567890!*$^&^^+=-\^|^>;'.,/?^<"
ECHO %betabet%
>u:\betabet.file ECHO %betabet%
CALL :upper betabet
ECHO %betabet%
CALL :upcase u:\betabet.file 
GOTO :EOF

:upper
FOR %%a 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 "%1=%%%1:%%a=%%a%%%"
GOTO :EOF

:upcase
setlocal EnableDelayedExpansion
for /F "delims=" %%a in (%1) do (
   set "line=%%a"
   for %%b 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 (
      set "line=!line:%%b=%%b!"
   )
   echo !line!
)
endlocal
GOTO :eof

Метод, на который указывает Aacini в командный файл Windows, читает текстовый файл и конвертирует все в верхний регистр для некоторых символов, как показано в приведенной выше партии.

] Эта партия также потерпит неудачу, если соответствующая строка содержит определенные символы (например, %:) - она ​​преобразует альфы, но удаляет % и :.

Вышеуказанная партия сначала устанавливает строка, содержащая разные символы, отображает ее, сохраняет ее как файл, затем преобразует ее с помощью :upper.

Для сравнения, файл затем обрабатывается с помощью функции :upcase (полученной из связанного ответа) .


После действительного комментария и дальнейшего изучения Aacini, приведены некоторые методы (включая демонстрацию метода «read-from-file»)

Подпрограмма :showline существует для сокращения кода путем отображения line в режиме delayedexpansion

@ECHO Off
SETLOCAL
set "line=abcdefghijklmnopqrstuvwxyz1234567890|!#$%%&/\()=?<>,;.:"'_-+*~^^[]{}"
SETLOCAL enabledelayedexpansion
>u:\betabet.file ECHO "!line!"
endlocal
CALL :showline
ECHO --- show conversion using "upper - caret disappears
CALL :upper line
CALL :showline
ECHO ------------------------------
ECHO --- show actual file contents ^& data read from file
type u:\betabet.file 
CALL :upcase u:\betabet.file 
ECHO ------------------------------
set "line=abcdefghijklmnopqrstuvwxyz1234567890|!#$%%&/\()=?<>,;.:"'_-+*~^^[]{}"
CALL :showline
ECHO --- show conversion using "inline-conversion - caret PRESERVED
setlocal ENABLEDELAYEDEXPANSION
for %%b 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 set "line=!line:%%b=%%b!"
echo "!line!"   ^<--- in inline conversion
endlocal&SET "line=%line:^=^^%"
CALL :showline
ECHO ------------------------------
set "line=abcdefghijklmnopqrstuvwxyz1234567890|!#$%%&/\()=?<>,;.:"'_-+*~^^[]{}"
CALL :showline
ECHO --- show conversion using "upcase2 - caret disappears
CALL :upcase2 line
CALL :showline
GOTO :EOF

:upper
FOR %%a 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 "%1=%%%1:%%a=%%a%%%"
GOTO :EOF

:upcase
setlocal EnableDelayedExpansion
for /F "delims=" %%a in (%1) do (
 ECHO read%%a
   set "line=%%a"
   for %%b 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 (
      set "line=!line:%%b=%%b!"
   )
   echo conv!line!
)
endlocal
GOTO :eof

:upcase2
setlocal ENABLEDELAYEDEXPANSION
for %%b 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 set "%1=!%1:%%b=%%b!"
endlocal&CALL SET "%1=%%%1%%"
GOTO :eof

:showline
SETLOCAL enabledelayedexpansion
ECHO "!line!"
endlocal
GOTO :eof
3
ответ дан Community 25 August 2018 в 05:58
поделиться

Это бессмысленно, поскольку имена env var и имена файлов нечувствительны к регистру. Но если вы настаиваете, вы можете сделать это следующим образом:

@echo off

setlocal enabledelayedexpansion
set lower=john smith 123
set alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZ
set i=0
:letter
set !alpha:~%i%,1!_=!alpha:~%i%,1!
set /a i += 1
if %i% LSS 26 goto letter
set i=0
set upper=
:uppercase
set let=!lower:~%i%,1!
if "%let%" == "" goto done
if defined %let%_ (set upper=%upper%!%let%_!) else (set upper=%upper%%let%)
set /a i += 1
goto uppercase
:done
echo %upper%
2
ответ дан Henrik 25 August 2018 в 05:58
поделиться

Спасибо за ответы ребята, я решил это с помощью этого -

if not defined %~1 EXIT /b
for %%a in ("a=A" "b=B" "c=C" "d=D" "e=E" "f=F" "g=G" "h=H" "i=I"
        "j=J" "k=K" "l=L" "m=M" "n=N" "o=O" "p=P" "q=Q" "r=R"
        "s=S" "t=T" "u=U" "v=V" "w=W" "x=X" "y=Y" "z=Z" "ä=Ä"
        "ö=Ö" "ü=Ü") do (
call set %~1=%%%~1:%%~a%%
)
EXIT /b

Я уверен, что ваши ответы намного опрятнее и эффективнее, но поскольку мой делает трюк, и я не хочу сломать все, что я оставлю, как есть!

Спасибо за ваш вклад!

2
ответ дан Joshua Patterson 25 August 2018 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: