Saturday, February 19, 2011

How to convert the value of %USERNAME% to lowercase within a Windows batch script?

I'm automating some source control software functionality using a dot bat script but given that our svn repos are hosted in a *NIX box, I'm facing the eternal case problem between these two worlds.

Is there any cmd.exe function to convert the value of the Windows system variable %USERNAME% to lower case?

Thanks much in advance!

From stackoverflow
  • a quick google found this...

    @echo off
    goto :end_remarks
    *************************************************************************************
    *
    *
    *    authored:Sam Wofford
    *    Returns lowercase of a string
    *    12:13 PM 11/13/02
    **************************************************************************************
    :end_remarks
    setlocal
    set errorlevel=-1
    if {%1}=={} echo NO ARG GIVEN&call :Help &goto :endit
    if {%1}=={/?} call :Help &goto :endit
    call :set_LCASE_array 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
    
    :start
    set input=%1
    set input=%input:"=%
    set totparams=0
    call :COUNT_PARAMS %input%
    call :MAKE_LOWERCASE %input%
    set errorlevel=
    echo %convertedstring%
    endlocal
    goto :eof
    :endit
    echo %errorlevel%
    endlocal
    goto :eof
    
    :MAKE_LOWERCASE
    :nextstring
    if {%1}=={} goto :eof
    set string=%1
    set /a params+=1
    set STRINGCONVERTED=
    set pos=0
    :NEXT_CHAR
    set onechar=%%string^:^~%pos%,1%%
    for /f "tokens=1,2 delims==" %%a in ('set onechar') do for /f %%c in ('echo %%b') do call :checkit %%c
    if not defined STRINGCONVERTED goto :NEXT_CHAR
    shift /1
    if %params% LSS %totparams% set convertedstring=%convertedstring% &:add one space,but not at end
    goto :nextstring
    goto :eof
    
    :Help
    echo USAGE:%~n0 string OR %~n0 "with spaces"
    echo function returns the lowercase of the string or -1 (error)
    echo strings with embedded spaces needs to be in quotes Ex. "lower case"
    echo in a batch NTscript "for /f %%%%A in ('lcase STRING') do set var=%%%%A"
    set errorlevel=
    goto :eof
    
    :checkit
    set LCFOUND=
    if /i {%1}=={echo} set STRINGCONVERTED=Y&goto :eof
    set char=%1
    for /f "tokens=2 delims=_=" %%A in ('set LCASE_') do call :findit %%A %char%
    :skipit
    if defined LCFOUND (set convertedstring=%convertedstring%%ucletter%) else (set convertedstring=%convertedstring%%char%)
    set /a pos+=1
    goto :eof
    
    :set_LCASE_array
    :setit
    if {%1}=={} goto :eof
    set LCASE_%1_=%1
    SHIFT /1
    goto :setit
    
    :findit
    if defined LCFOUND goto :eof
    set ucletter=%1
    set lcchar=%2
    if /i {%ucletter%}=={%lcchar%} set LCFOUND=yes
    goto :eof
    
    :COUNT_PARAMS
    :COUNTPARAMS
    if {%1}=={} goto :eof
    set /a totparams+=1
    shift /1
    goto :COUNTPARAMS
    

    add that as a file (lowercase.cmd) to your path and you should be able to call it as "Lowercase.cmd %Username%", you could pipe it into another command if needed.

    Greg D : Ew. Thanks for reminding me why I'm trying to sell PowerShell as the windows scripting solution at my org.
    Mauro : LOL...I haven't used command line for a looooong time, all my programming is now javascript, asp.net, c# and sql.
  • download some unix utilities for DOS from http://short.stop.home.att.net/freesoft/unix.htm and use tr.exe (translate characters)

    echo %USERNAME% | tr "[A-Z]" "[a-z]"

    I also use a DOS extended cmd replacement named 4NT which has a built in command @lower

    echo %@lower[%USERNAME%]

    Nano Taboada : Thanks much for your comment. I've thought about that approach but that would imply having to install that tools in each user's box, I was interested in solving the problem with existing Windows tools.

0 comments:

Post a Comment