Заглавная буква переменной в командном файле Windows - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь использовать первую букву для вывода из переменной %COMPUTERNAME%.Я пробовал приведенный ниже код, который не работает.

set host=%COMPUTERNAME%
echo %host% | sed 's/^\(.\)/\1\u\2/g/'

Вывод должен быть Beast, а не BEAST или beast

Ответы [ 4 ]

0 голосов
/ 12 октября 2018

Вот ответ sed, хотя я бы порекомендовал ответ @LotPings powershell для Windows.Обратите внимание, что для типичного %computername% наиболее важным вопросом в вашем вопросе является преобразование всех символов, кроме первого, в нижний регистр.

set host=%COMPUTERNAME%
echo %host% | sed -r 's/^(.)(.*)/\U\1\L\2/'
0 голосов
/ 12 октября 2018

попробуйте это:

@echo off
setlocal
set "f_leter=%COMPUTERNAME:~0,1%"
set "the_rest=%COMPUTERNAME:~1%"

call :UpCase %f_leter% f
call ::LoCase %the_rest% rest

set result=%f%%rest%
echo %result%

exit /b %errorlevel%
endlocal
::http://www.robvanderwoude.com/battech_convertcase.php
:LoCase
:: Subroutine to convert a variable VALUE to all lower case.
:: The argument for this subroutine is the variable NAME.
setlocal enableDelayedExpansion
set "var=%~1"
FOR %%i 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 (
 SET "var=!var:%%~i!"
)
endlocal&(
    if "%~2" neq "" (
        set "%~2=%var%"
    ) else (
        echo %var%
    ) 
)&GOTO:EOF

:UpCase
setlocal enableDelayedExpansion
set "var=%~1"
:: Subroutine to convert a variable VALUE to all UPPER CASE.
:: The argument for this subroutine is the variable NAME.
FOR %%i 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 (
    SET "var=!var:%%~i!"
)
endlocal&(
    if "%~2" neq "" (
        set "%~2=%var%"
    ) else (
        echo %var%
    ) 
)&GOTO:EOF
0 голосов
/ 12 октября 2018

Я часто склоняюсь обернуть команду powershell для этого:

:: Q:\Test\2018\10\12\SO_52769852.cmd
@Echo off
For /f %%A in ('
  Powershell -NoP -C "$Env:COMPUTERNAME.Substring(0,1).ToUpper()+$Env:COMPUTERNAME.Substring(1).ToLower()"
') do set host=%%A
Echo:%host%
0 голосов
/ 12 октября 2018

Вместо использования SEd вы, вероятно, можете сделать это как одну строку, используя встроенную команду Find.

@For /F "Tokens=2 Delims=:" %%A In ('"Find "" ":%ComputerName:~,1%" 2>&1"') Do @Echo %%A%ComputerName:~1%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...