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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 SET LOWER=abcdefghijklmnopqrstuvwxyz
 SET UPPER=ABCDEFGHIJKLMNOPQRSTUVWXYZ
 ECHO bonjour maitre | SED y/%LOWER%/%UPPER%/
2- les options "LUlu"

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
FOR %%A IN (*.TXT) DO GAWK "{print toupper($0)}" "%%A" >"$%%A" && MOVE "$%%A" "%%A"