/ / Ako previesť hodnotu% USERNAME% na malé písmená v rámci dávkového skriptu systému Windows? windows, skriptovanie, dávkový súbor, cmd

Ako previesť hodnotu% USERNAME% na malé písmená v rámci dávkového skriptu systému Windows? windows, skriptovanie, dávkový súbor, cmd

Automatizujem funkčnosť softvéru na ovládanie zdrojového kódu pomocou dot bat script, ale vzhľadom na to, že naše svn repos sú umiestnené v krabici * NIX, čelím večnému problému medzi týmito dvoma svetmi.

Existuje nejaká funkcia cmd.exe na konverziu hodnoty systémovej premennej Windows% USERNAME% na malé písmená?

Vďaka veľa vopred!

odpovede:

8 pre odpoveď č. 1

rýchly google found toto...

@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

pridajte, že ako súbor (lowercase.cmd) k svojej ceste a mali by ste byť schopní nazvať ju ako "Lowercase.cmd% Username%", v prípade potreby by ste ju mohli pridať do iného príkazu.


12 pre odpoveď č. 2

Nuž, prehľadala som nejakú syntax a narazila na túto stránku. Viem, že je to staré, ale myslel som si, že si urobím pauzu a dám mozku trochu kopnúť.

Tu je niečo trochu kratšie a zvládnuteľné. Toto jednoducho "hrubé sily" všetky veľké písmená na malé písmená, bez ohľadu na to, či skutočné písmeno existuje v reťazci, alebo nie. Funkčná slučka teda prebieha presne 26 krát bez ohľadu na dĺžku reťazca.

Dúfam, že to niekomu pomôže.

@echo off
cls
setlocal enabledelayedexpansion

REM ***** Modify as necessary for the string source. *****
set "_STRING=%*"
if not defined _STRING set "_STRING=%USERNAME%"
set _STRING
REM ***** Modify as necessary for the string source. *****

set "_UCASE=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
set "_LCASE=abcdefghijklmnopqrstuvwxyz"

for /l %%a in (0,1,25) do (
call set "_FROM=%%_UCASE:~%%a,1%%
call set "_TO=%%_LCASE:~%%a,1%%
call set "_STRING=%%_STRING:!_FROM!=!_TO!%%
)

set _STRING
endlocal

Príklad:

E:OS.ADMIN>LCASE.BAT The Quick Fox Jumps Over The Brown Fence.

výsledok:

_STRING=The Quick Fox Jumps Over The Brown Fence.
_STRING=the quick fox jumps over the brown fence.

3 pre odpoveď № 3

Stiahnite si niektoré utilitá pre UNIX z DOS http://short.stop.home.att.net/freesoft/unix.htm a použite tr.exe (prekladať znaky)

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

Používam aj rozšírenú výmenu cmd DOS s názvom 4NT, ktorá má zabudovaný príkaz @lower

echo% @ nižšie [% USERNAME%]


2 pre odpoveď № 4

http://www.dzone.com/snippets/lowercasing-string-bat-files

lower.bat

echo>%1
dir /b/l %1>lower.tmp
set /p result=<lower.tmp
echo %result%

cmd

lower "Mein BinnenMajuskel"

výsledok

mein binnenmajuskel

POZOR: Rýchle a špinavé, ale aj neisté a nebezpečné varianty. Pretože vytvoríte dva súbory. Jeden nazývaný ako daný reťazec a druhý názvom lower.tmp, ktorý obsahuje znížený reťazec. Čo sa stane, ak vykonáte lower "UserName" v adresári, kde už tento súbor alebo adresár existuje? Najmä v prípade, že tieto súbory následne odstránite ...


1 pre odpoveď č. 5

Keď je nainštalovaný skriptovací jazyk, potom sa dá použiť s "FOR" na nastavenie premennej.
Môžete použiť ľubovoľný jazyk, ktorý dokáže transformovať a vygenerovať reťazec.

Príklad pomocou Perl 5:

@FOR /F %%s IN ("perl -e "print lc(pop)" %USERNAME%") DO @set USERNAME=%%s

Príklad používajúci funkciu PowerShell:

@FOR /F %%s IN ("powershell -command "(get-item env:"USERNAME").Value.ToLower()"") DO @set USERNAME=%%s

0 pre odpoveď č. 6
:: UPcase.bat ==> Store in environment variable _UPcase_ the upper case of %1
:: -> Use quotes "" when the first argument has blanks or special characteres
::
:: Adapted from -> http://www.netikka.net/tsneti/info/tscmd039.htm
::
:: Note that the substitution method is case insensitive, which means that
:: while working for this application, it is not useful for all character
:: substitution tasks.
::
:: More concisely, one can capitalize (if you pardon the pun) on the fact
:: that in for and the substitution lower and upper case source are
:: equivalent.
@echo off

:: %~1 -> removes quotes from the first command line argument
:: http://steve-jansen.github.io/guides/windows-batch-scripting/part-2-variables.html
@echo off
::setlocal EnableExtensions
:: echo %_UPcase_%
call :ToUpcaseWithFor "%~1" _UPcase_
:: echo %_UPcase_% _doit_1_
::endlocal & goto :EOF
goto :EOF
::
:: ======================
:ToUpcaseWithFor
setlocal EnableExtensions EnableDelayedExpansion
set var_=%~1
for %%c 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 var_=!var_:%%c=%%c!
)
endlocal & set %2=%var_%& goto :EOF

:EOF
:: UPcase.bat ==> EOF