IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

ENABLEDELAYEDEXPANSION et "!" dans le nom de fichier [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 33
    Par défaut ENABLEDELAYEDEXPANSION et "!" dans le nom de fichier
    Bonjour

    J'ai créé un batch dos (XP SP3) utilisant "SETLOCAL ENABLEDELAYEDEXPANSION"
    Le problème vient que lorsque je parcours un dossier contenant d'autres dossiers avec FOR /D, si le nom d'un sous-dossier contient "!" le batch plante avec l'erreur

    "Le chemin d'accès spécifié est introuvable." alors qu'un simple dir le visualise sans problème...

    A noter que j'ai bien ciblé le problème car si je remplace "!" par "§" dans le nom du sous-dossier le batch fonctionne sans problème.
    Je suppose que cela vient de l'utilisation des variables !x! et à l'expansion retardée, mais j'en ai, hélas, besoin.

    Quelqu'un a une solution ??? (mis à part renommer tous les sous-dossiers ayant un "!" évidemment !!!)

    Pour info mon batch

    Code bat : 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
     
    @SETLOCAL ENABLEDELAYEDEXPANSION
    @SETLOCAL ENABLEEXTENSIONS
     FOR /D %%d IN (*) do (
      cd %%d
      set n=0
      FOR %%f IN (*.txt) do ( set /A "n+=1" )
    rem ------------------------------
      FOR %%f IN (*.txt) do (
       if NOT "!n!" EQU "1" ( mkdir "%%~nf" )
       "C:\Program Files\ExtCba\ExtCba.exe" "%%f" "."
       if NOT "!n!" EQU "1" (
        move *.cba "%%~nf" 
       )
    rem ------------------------------
      )
      cd ..
     )
    exit

    PS:quelqu'un sait il aussi pourquoi mon batch refuse les noms de variable supérieurs à 1 caractère ??? http://www.developpez.net/forums/ima...s/headbang.gif

    Merci d'avance
    Th

  2. #2
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Fais ton BAT sans expansion retardée :


    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    @echo off
     FOR /D %%d IN (*) do (
      cd %%d
      set n=0
      FOR %%f IN (*.txt) do ( set /A "n+=1" )
     
      FOR %%f IN (*.txt) do (
       if NOT "%n%" EQU "1" ( mkdir "%%~nf" )
       "C:\Program Files\ExtCba\ExtCba.exe" "%%f" "."
       if NOT "%n%" EQU "1" (
        move *.cba "%%~nf" 
       )


    PS:quelqu'un sait il aussi pourquoi mon batch refuse les noms de variable supérieurs à 1 caractère ???



    Ne fonctionne pas ????





  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 33
    Par défaut Re
    Bonjour et merci,

    Quand je l'ai testé sans "delayed" j'ai eu plusieurs erreurs différentes à l’exécution selon le nombre de %

    => "%n%" = "" (rien)
    => "%%n%%" = "%n%" (mais pas de valeur !)
    => "%%n" = erreur
    => "%%n%" = erreur

    D'où l'utilisation de !n! qui marche... mais pas avec les fichiers genre toto!.txt

    Je ne dois pas avoir un NTVDM standard LOL

    Pour les variables, en ligne de commande sous CMD il n'y a pas de problème
    En .bat cela me met immanquablement une erreur lors de l'utilisation de la variable %toto% => "%toto% inattendu"

    Vive le shell unix... la "copie dos" n'est pas aussi cool !

  4. #4
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    fait juste un test :

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @echo off
    for /l %%a in (1,1,20) do set /a $n+=1
     
    echo %$n%

    regarde si il te retourne bien 20.

    Vraiment bizarre ton problème.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [BATCH] Espaces dans les noms de fichiers :|
    Par andlio dans le forum Windows
    Réponses: 1
    Dernier message: 03/08/2006, 03h42
  2. Espace dans un nom de fichier
    Par pouli dans le forum Langage
    Réponses: 5
    Dernier message: 27/07/2006, 12h26
  3. Incrémenter un n° dans un nom de fichier
    Par pandore dans le forum Fortran
    Réponses: 6
    Dernier message: 03/05/2006, 11h30
  4. Réponses: 6
    Dernier message: 03/05/2006, 11h01
  5. Réponses: 17
    Dernier message: 12/04/2005, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo