我正在尝试将%COMPUTERNAME%
变量的输出的首字母大写。我尝试了以下无效的代码。
set host=%COMPUTERNAME%
echo %host% | sed 's/^\(.\)/\1\u\2/g/'
输出应为Beast
,而不是BEAST
或beast
答案 0 :(得分:2)
我经常倾向于为此使用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%
答案 1 :(得分:1)
尝试一下:
@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
答案 2 :(得分:1)
这是sed
的答案,尽管我建议在Windows上使用@LotPings powershell答案。请注意,对于典型的%computername%
,问题的重点是将除第一个字符外的所有字符都转换为小写字母。
set host=%COMPUTERNAME%
echo %host% | sed -r 's/^(.)(.*)/\U\1\L\2/'
答案 3 :(得分:0)
除了使用SEd
之外,您还可以使用内置的Find
命令将其作为一行来完成。
@For /F "Tokens=2 Delims=:" %%A In ('"Find "" ":%ComputerName:~,1%" 2>&1"') Do @Echo %%A%ComputerName:~1%