Majuscule **vs** Minuscule
salut,
dans ce petit tuto on va essayer de voir plusieurs façons de convertir des chaînes de caractères en minuscule/majuscule et en majuscule/minuscule.
en natif on n'a pas de commandes qui permettent de traiter ce genre de conversion, le seul moyen "EXPLICITE" est le commutateur /L de la commande DIR
1 - Commutateur /L
On peux utiliser le commutateur /L "L comme LOWER" de la commande DIR de la manière suivante:
Code:
1 2 3 4 5 6 7 8 9 10
|
z:\> DIR /B
Mon FICHIER.txt
ScrIPt.Pl
z:\> DIR /B /L
mon fichier.txt
script.pl |
On peux utiliser ce commutateur pour, par exemple, renommer les fichiers en minuscules:
Code:
1 2 3
|
FOR /F "DELIMS=" %%X In ('DIR *.TXT /B/L/A:-D') DO RENAME "%%X" "%%X"
:: ACTUALISER ou <F5> :: |
2 - Manières Détournées: (Tous ces codes sont testés sous XP PRO SP2 "VER FR")
uc1.bat
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
:::::::::::::::::::::::::::::::::::::::::::::::::::
:SYNTAXE:
::
:: uc fichier_source
:: uc fichier_source > fichier_de_sortie
:::::::::::::::::::::::::::::::::::::::::::::::::::
@ECHO OFF
IF NOT EXIST "%~1" EXIT /B 1
FOR /F "USEBACKDELIMS=" %%A IN ("%~1") DO (
SET "N.LINE=%%A"
CALL :UC N.Line
)
GOTO :EOF
:UC
SETLOCAL DISABLEDELAYEDEXPANSION
FOR /F "TOKENS=1* DELIMS=\" %%1 IN ('CALL TREE \"%%N.LINE%%"^|FIND ":\"') DO ECHO;%%2
ENDLOCAL & GOTO :EOF |
uc2.bat
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
::::::::::::::::::::::::::::::::::::::::::::::::::::::
:SYNTAXE:
::
:: uc2 bonjour maitre
::::::::::::::::::::::::::::::::::::::::::::::::::::::
@ECHO OFF
SET "_SET=%*"
IF NOT DEFINED _SET (SET _SET=abcdefghijklmnopqrstuvwxyz)
2>$ FIND "" "%_SET%"
<$ SET/P "$="
SET "$=%$:*-=%"
ECHO;%$%
DEL $
GOTO :EOF |
uc3.bat
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
:::::::::::::::::::::::::::::::::::::::::::
:SYNTAXE:
:: uc3 fichier_source fichier_de_sortie
:EXEMPLE:
:: uc3 c:\minus.txt c:\maj.txt
:::::::::::::::::::::::::::::::::::::::::::
@ECHO OFF
SET "INFILE=%~1"
SET "OUFILE=%~2"
IF EXIST "%INFILE%" IF DEFINED OUFILE (
>'.VBS ECHO DO WHILE NOT WSH.STDIN.ATENDOFSTREAM
>>'.VBS ECHO WSH.STDOUT.WRITELINE UCASE(WSH.STDIN.READLINE^)
>>'.VBS ECHO LOOP
CALL :EXEC
DEL '.VBS
) ELSE (
EXIT /B 1
)
GOTO :EOF
:EXEC
<"%INFILE%" CSCRIPT /NOLOGO /E:VBSCRIPT '.VBS >"%OUFILE%"
GOTO :EOF |
3 - Outils Externes "GAWK" "SED" "TR"
On peux aussi utiliser des outils externes telque "SED" "TR" "GAWK" qui ont l'avantage de s'utiliser comme
commandes simple ou bien comme filtre:
a) GnuSED
On peux utiliser SED de deux façon pour la conversion des caractères: (minuscule/majuscule) et (majucule/minuscule):
1- le commutateur "y"
Code:
1 2 3 4
|
SET LOWER=abcdefghijklmnopqrstuvwxyz
SET UPPER=ABCDEFGHIJKLMNOPQRSTUVWXYZ
ECHO bonjour maitre | SED y/%LOWER%/%UPPER%/ |
2- les options "LUlu"
Code:
1 2 3 4 5 6
|
L = Convertir toute la chaîne en minuscule
l = Convertir le premier caractère en minuscule
U = Convertir toute la chaîne en majuscule
u = Convertir le premier caractère en majuscule |
uc4.bat
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
::::::::::::::::::::::::::::::::::::::::::::::::::
:SYNTAXE:
:: uc4 fichier_source OPT
:: uc4 fichier_source OPT fichier_de_sortie
:: OPT = L Minuscule
:: = U Majuscule
:EXEMPLE:
::
:: uc4 file.txt U
:: uc4 c:\folder\help.txt L
:: uc4 monfichier.txt U c:\output.txt
:: uc4 file.txt L ufile.txt
::
:: Dependance: GNUSED v 4.2
:::::::::::::::::::::::::::::::::::::::::::::::::::
@ECHO OFF & SET OUT=CON
IF EXIST "%~1" (
ECHO=%~2 | FINDSTR /RC:"^[UL].$">NUL
IF NOT ERRORLEVEL 1 (
IF NOT [%~3]==[] ( SET OUT="%~3" )
SETLOCAL ENABLEDELAYEDEXPANSION
<"%~1" >!OUT! SED "s/.*/\%2&/"
ENDLOCAL
)
)
GOTO :EOF |
b) TR
Code:
1 2 3 4 5 6 7 8 9
|
Z:\> ECHO bonjour maitre | TR /a-z/ /A-Z/
BONJOUR MAITRE
Z:\> CAT FILE.TXT
ceci est un test
Z:\> TR /a-z/ /A-Z/ < FILE.TXT
CECI EST UN TEST |
c) GAWK
on peux utiliser les deux fonctions Built-in Tolower() et ToUpper() de façon très simple:
Code:
1 2 3 4 5 6
|
Z:\> ECHO bonjour maitre | gawk "{print toupper($0)}"
BONJOUR MAITRE
Z:\> ECHO BONJOUR MAITRE | gawk "{print tolower($0)}"
bonjour maitre |
bien sur on peux utiliser GAWK comme filtre mais aussi comme simple commande:
par exemple un simple code pour convertir tout le contenu des fichiers *.TXT dans
le répertoire courant en majuscule
Code:
1 2
|
FOR %%A IN (*.TXT) DO GAWK "{print toupper($0)}" "%%A" >"$%%A" && MOVE "$%%A" "%%A" |