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 :

Echappement caractère de redirection


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut Echappement caractère de redirection
    Bonjour,

    Je souhaite ecrire le contenu d'une variable dans un fichier.
    Seulement voilà ma variable peut éventuellement contenir le caractère "<" ou ">" qui sont identifiés comme des caractères de redirection vers un fichier en shell windows.
    Le résultat est qu'en voulant écrire le contenu de ma variable dans un fichier il essaye de rediriger vers un fichier inexitant donc on a une erreur du type : " le fichier spécifié est introuvable "


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @ECHO OFF
    echo La requete a executer : 
    set /p req=
    pause
    echo  %req%; > ordreOUT.sql

    j'ai tenté de remplacer le caractère "<" ou ">" avant de l'inscrire dans le fichier ainsi :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set req=%req:^>:^^^>%
    set req=%req:^<:^^^<%

    sans succès...

    je pensais à utiliser le code ascii du caractère mais je ne sais pas comment faire ni même si cela fonctionnerait.

    Avez vous une idée ?
    Merci.

  2. #2
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    Salut,

    retourne les caractères reservés: <>!%|^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @ECHO OFF
    
    echo La requete a executer : 
    set /p req=
    for %%x In ("%req%") do echo.%%~x; >ordreOUT.sql
    pause

  3. #3
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    j'ai essayé ta solution sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo EXPORT TO %sortie% OF IXF MESSAGES %log% > ordreOUT.sql
    for %%x In ("%req%") do echo.%%~x; >> ordreOUT.sql
    à moins que je n'ai pas tout saisi ...

  4. #4
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    le code je l'ai tester et il fonctionne..
    essaye de l'executer independemment de ton script
    Ps: désolé,je ne peut pas te repondre maintenant..peut être plus tard

  5. #5
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    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
    :newbase
      echo Le nom de la base sur laquelle il faut se connecter :
      set /p base=
      set user=user
      set pass=pass
      set index=0
    :newreq
      set /a index=%index%+1
      set log=logExport%index%.txt
      echo La requete a executer : 
      set /p req=
      set sortie=[EXPORT_%index%]%base%.ixf
        rem debut de la commande
      echo EXPORT TO %sortie% OF IXF MESSAGES %log%> ordreOUT.sql
        rem on inscrit la requete a la suite :
      for %%x In ("%req%") do echo.%%~x; >>ordreOUT.sql
      echo lancer export ? (n:non / o:oui )
      set /p non=
      If not "%non%"=="n" db2cmd export.bat %base% %user% %pass%
      exit
    j'ai intégrer ton code et cela ne fonctionne pas

  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 tout le monde;

    Citation Envoyé par keub51 Voir le message
    Seulement voilà ma variable peut éventuellement contenir le caractère "<" ou ">"
    Très très mauvaise idée. À utiliser seulement si tu n'as pas le choix et évites de le faire plus d'une fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @ECHO OFF
    set /p req=
    pause
    echo  %req:>=^>%; > ordreOUT.sql

  7. #7
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    la solution de I'm_HERE marche en fait mais ne apsse pas s'il a une etoile ( * ) dans la variable req ...

    pourquoi ?

    et pour tout vous dire c'est peut être une mauvaise idée de mettre des < et * dans une variable mais la variable represente une requete qui peut etre executer en base ! donc req peut valoir par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where idf < 10
    maxim_um :
    j'ai déjà testé le echo %req:>=^>%; > ordreOUT.sql

    mais quand il rencontre le "<" il veut rediriger dans un fichier ... j'ai également essayé en l'échappant de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo  %req:^>=^^^>%; > ordreOUT.sql
    sans succès.

  8. #8
    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
    Citation Envoyé par keub51 Voir le message
    mais quand il rencontre le "<" il veut rediriger dans un fichier ...
    Ce n'était qu'un exemple, dis-toi bien qu'à chaque étage d'utilisation ou d'assignation, tu dois de nouveau remplacer le caractère de redirection par son équivalent échappé. La problématique, c'est quand il y en a plusieurs, ça devient un vrai casse-t^te. Je me demande s'il ne serait pas mieux de passer par un fichier temporaire. Sinon utiliser «find» pour savoir quel symbole a été utilisé dans la variable requête et s'adapter en conséquence. Dans le pire des cas, peut-être ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo ctrl+z pour valider
    type con>req
    for /f "tokens=*" %%i in (req) do echo %%i >m.txt

Discussions similaires

  1. Fichier de config echappement caractères
    Par wakan dans le forum Débuter
    Réponses: 2
    Dernier message: 04/05/2010, 14h00
  2. Echappement caractère $ dans un EOF
    Par bennyboy dans le forum Langage
    Réponses: 1
    Dernier message: 07/04/2009, 10h11
  3. Echapper caractère "
    Par Matof dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 02/05/2008, 19h57
  4. guillemet et caractères echappement
    Par Girzi dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/07/2006, 11h10
  5. [Conception] Echappement de caractères
    Par nicoaix dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/04/2006, 19h32

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