[DOS] lister le contenu d'un rep sans les ext

mr_poussy Messages postés 2740 Statut Modérateur -  
cchristian Messages postés 928 Statut Membre -
Bonjour,

Je cherche arecuperer le nom de chaque fichier d'un repertoire, sans les extension, afin de l'inserer dans une autre chaine de caratere.

le tout en cmd dos....

je cherche, je cherche mais si vous avez des idées, je suis preneur.

pour l'instant j'en suis la :

@echo off

cd /d "MonChemin"

for %%P in (*.*) do (
set str=%%P
rem echo %str%
rem echo %%P
rem set str=%str:1,-1%
echo %str%
echo %%P
)

mais je ne sais pas pourquoi la variable str ne prend pas la valeur de %%P pour chaque occurence.

help
--

--
mr poussy
Configuration: - 1 pentium 150 Mhz - linux - firewall/NAT
- 1 pentium 4 2 Ghz - 512 Mo RDram - serveur fichier/impression 
- 1 athlon xp 2600+/asus nforce2 - 512 MoDDram - win xp - c'est mon miens
- 1 amd 533 Mhz overclock a 800 Mhz - pc copine ;)
- 1 intel 800 Mhz - base oracle de test temporaire

1 réponse

  1. cchristian Messages postés 928 Statut Membre 131
     
    Bonsoir,

    mais je ne sais pas pourquoi la variable str ne prend pas la valeur de %%P pour chaque occurence.

    Essaie de cette manière :

      
    @echo off 
          SETLOCAL ENABLEdelayedExpansion 
           SETLOCAL ENABLEextensions
    
    cd /d "MonChemin" 
    
    for %%P in (*.*) do ( 
    set str=%%P 
    rem echo !str! 
    rem echo %%P 
    rem set str=!str:1,-1! 
    echo !str! 
    echo %%P 
    ) 


    Faire à ce sujet 'HELP SET' sur invite de commandes
    ........................
    ........................
    Enfin, la prise en charge de l'expansion retardée de variables d'environnement
    a été ajoutée. Cette prise en charge est toujours désactivée par défaut, mais
    peut être activée/désactivée via l'option de ligne de commande /V dans CMD.EXE.
    Voir CMD /?
    
    La prise en charge de l'expansion retardée de variables d'environnement est
    utile pour contourner les limites de l'expansion en cours qui se produit à la
    lecture d'une ligne de texte et non à son exécution. L'exemple suivant montre
    le problème causé par l'expansion immédiate de variables :
    
        set VAR=avant
        if "%VAR%" == "avant" (
            set VAR=après
            if "%VAR%" == "après" @echo Cela marche si vous lisez ce message
        )
    
    n'affichera jamais le message car la variable %VAR% présente dans les deux
    instances de IF est remplacée à la lecture de la première instance de IF, étant
    donné que le corps de IF, instruction composée, est logiquement inclus. Donc le
    IF compris dans l'instance compare "avant" avec "après" et il n'y aura jamais
    égalité. De même, l'exemple suivant ne fonctionnera pas comme prévu :
    
        set LIST=
        for %i in (*) do set LIST=%LIST% %i
        echo %LIST%
    
    car la liste des fichiers du répertoire ne sera PAS créée, et en fait la
    variable LIST prendra le valeur du dernier fichier trouvé. Une fois encore
    cela est dû au fait que %LIST% n'est étendu qu'une fois, lorsque FOR est
    lu et à ce stade la variable LIST est vide. Donc la boucle FOR exécutée est :
    
        for %i in (*) do set LIST= %i
    
    qui donne toujours à LIST la valeur du dernier fichier trouvé.
    
    L'expansion retardée de variables d'environnement vous permet d'utiliser un
    autre caractère (le point d'exclamation) afin d'étendre les variables
    d'environnement durant l'exécution. Si l'expansion retardée de variables est
    activée, les exemples ci-dessus peuvent être écrits comme suit afin de
    fonctionner comme vous le souhaitez :
    
        set VAR=avant
        if "%VAR%" == "avant" (
            set VAR=après
            if "!VAR!" == "après" @echo Cela marche si vous lisez ce message
        )
    
        set LIST=
        for %i in (*) do set LIST=!LIST! %i
        echo %LIST%
    ...................................
    ..................................
    


    Pour n'obtenir que le nom du fichier :

    SET "str=%%~nP"
    echo !str!
    echo %%P

    Faire à ce sujet 'HELP FOR' sur invite de commandes
    ............................
    ...........................
    De plus, la substitution de références de variables FOR a été améliorée.
    Vous pouvez maintenant utiliser la syntaxe optionnelle suivante :
    
        %~I         - étend %I en supprimant les guillemets (")
        %~fI        - étend %I en nom de chemin d'accès reconnu
        %~dI        - étend %I en lettre de lecteur uniquement
        %~pI        - étend %I en chemin d'accès uniquement
        %~nI        - étend %I en nom de fichier uniquement
        %~xI        - étend %I en extension de fichier uniquement
        %~sI        - chemin étendu contenant uniquement des noms courts
        %~aI        - étend %I en attributs du fichier
        %~tI        - étend %I en date/heure du fichier
        %~zI        - étend %I en taille du fichier
        %~$PATH:I   - parcourt les répertoires de la variable
                       d'environnement PATH et étend %I en nom du
                       premier fichier reconnu trouvé. Si le nom de la
                       variable d'environnement n'est pas défini ou
                       que le fichier n'est pas trouvé par la recherche,
                       alors ce modificateur étend en chaîne vide
    
    Vous pouvez combiner les modificateurs pour obtenir des résultats composés :
    
        %~dpI       - étend %I en lettre de lecteur et chemin d'accès uniquement
        %~nxI       - étend %I en nom de fichier et extension uniquement
        %~fsI       - étend %I en nom de chemin complet avec noms courts
                       uniquement
        %~dp$PATH:i - parcourt les répertoires listés dans la variable
                       d'environnement PATH à la recherche de %I et étend
                       en lettre de lecteur du premier trouvé.
        %~ftzaI     - étend %I en DIR comme ligne en sortie

    ............................
    ...........................
    0