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 :

Caractères spéciaux dans les variables [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Par défaut Caractères spéciaux dans les variables
    Salut,

    comment échapper les caractères spéciaux tels que "!", "%" ou "&" compris dans une variable "%%a" (issue d'une boucle qui explore un répertoire avec la commande dir) ?

    Car cette variable "%%a" est malheureusement inutilisable par la suite, si elle comprend ces caractères spéciaux.

    J'ai essayé la commande sed mais je n'arrive pas à la faire marcher, d'autant plus que de toutes manières le simple fait de devoir utiliser un fichier texte pour la manoeuvre signifie de devoir "echo %%a>fichier.txt" ce qui implique qu'on perd les "!" contenue dans la variable !

    C'est un vrai casse-tête...

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Par défaut
    Aïe Aïe Aïe, je m'en sort pas.

    Toutes les solutions que j'envisage passent par :
    - la construction d'une variable
    - et l'écriture de cette variable dans un fichier, ce qui du coup supprime les caractères spéciaux et rebelotte...

    Donc on ne peut jamais avoir une variable propre.

    Ni même simplement faire une simple recherche avec Find (en vue de zapper des chemins avec des "!" par exemple), parce que là encore il faut chercher dans un fichier, donc écrire la variable dedans !


    D'Ooh !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 165
    Par défaut
    Salut,

    tu peux donner quelques exemples ? avec le résultat attendu

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Par défaut
    edit : en amont du batch il y a un "setlocal enabledelayedexpansion"
    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
    set rep=C:\Documents and Settings\*****\Bureau
    ::for /f "delims=" %%a in ('dir /b /s /a:-d "%rep%"') do (
    for /f "delims=" %%a in ("Salut!") do (
    	call :search "%%a"
    	if "!spec!"=="yes" echo caractere trouve dans %%a
    )
    pause
    goto :eof
    
    		:search
    		set match=%~1
    		echo %match% |findstr "^!">nul
    		if errorlevel=1 set spec=no&& goto :eof
    		if errorlevel=0 set spec=yes&& goto :eof
    		goto :eof
    Le "for" que j'ai désactivé avec "::" explore mon bureau sur lequel se trouve un lien "JOUER !", donc un fichier qui a comme chemin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Documents and Settings\*****\Bureau\JOUER !.lnk
    Comme la commande "search" ne me renvoyait pas au final "caractere trouve dans %%a" j'ai essayé avec une simple string "Salut!", mais ça ne renvoit toujours pas.

    Du coup je crois que le MS DOS c'est vraiment limité : dès qu'il y a des "!" dans le nom des fichier, c'est foutu.

    Et c'est embêtant vu que je suis en train de construire un batch qui sauvegarde les données contenues dans "AllUsers" et dans les profils d'utilisateurs avant un formatage (genre Application Data etc), et que dans ces répertoires se trouvent parfois des fichiers avec des "!" ou des "%" ou encore des "$".
    Un simple raccourcis HTML dans "Favoris" contient parfois des caractères à la noix...

    Les problèmes qui s'ensuivent sont divers, ça va de la variable qui ne peu plus servir à un "if exist" ou un "set size=%~z1", à des messages d'erreurs en tous genre comme "la commande "machintruc" n'existe pas (genre la fin du chemin après un "&" est comprise comme étant une commande -_-).

    Moi j'veux bien que quelques fichiers soit zappés, mais ce qui m'ennuit vraiment c'est les messages d'erreurs qui plombent la fenêtre de commande. C'est inesthétique, surtout quand on se plie en 4 pour faire un truc propre et lisible.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Par défaut
    Par contre si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo !match! |findstr /c:"JOUER .lnk">nul
    il va trouver ! Donc ça prouve bien que "%%a" remplace les caractères spéciaux par des espaces !

    Du coup après si on fait un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not exist "%%a" echo n'existe pas
    Ca affiche que le chemin n'existe pas.

    J'suis démoli. Deux semaines de labeur pour me ramasser sur un truc pareil.

    Si ça continue j'abandonne l'informatique. C'est trop de prise de tête pour inventer des trucs que les gens compétents n'ont pas daigné inventer, et tout ça pour au final s'apercevoir que nos efforts n'aboutissent pas, encore une fois à cause d'un truc qui a pas été fait correctement...

    Si vous connaissez un soft qui permette de sauvegarder tout ce qu'il y a à sauvegarder avant un formatage (Application Data, Favoris, Mes Documents, etc), j'suis preneur.

  6. #6
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    Salut,

    Citation Envoyé par DeVit Voir le message
    J'suis démoli. Deux semaines de labeur pour me ramasser sur un truc pareil.
    Si je ne m'abuse, il a déjà été question de caractères réservés dans certaines de tes discussions. Non?

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

Discussions similaires

  1. [Batch] Utiliser des caractères spéciaux dans les noms de variables?
    Par DeVit dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 09/10/2009, 11h33
  2. Caractère spéciaux dans les requêtes SQL
    Par Thundara dans le forum SGBD
    Réponses: 3
    Dernier message: 17/04/2008, 11h15
  3. Caractères spéciaux dans les noms de variables POST
    Par guidav dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/09/2007, 13h36
  4. [SQL] Problème d'affichage de caractère spéciaux dans une variable chaîne
    Par Kryptonaute dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/08/2006, 08h40

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