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

  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

  9. #9
    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 I'm_HERE Voir le message
    voici une autre manière d'opérer [mais c'est un peu limiter]...
    Je n'ai pas trouvé d'émoticon qui convient. Tu sais, un qui donnerait le tournis.

    Enfin, voilà un autre milkshake:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set /p f=
    echo "%f%">req
    for /f "tokens=*" %%i in (req) do echo %%~i >ordreOUT.sql
    pause

  10. #10
    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
    Bingo !!

  11. #11
    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
    Re,

    sinon voici une autre solution, sans passer par un fichier intermédiaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set /p var=
    for /f "tokens=2 delims==" %%i In ('set var') do echo.%%i >Sortie.txt

  12. #12
    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 I'm_HERE,

    'set var' oui, mais s'il y a plus d'une variable commençant par la chaine "var", cela aura pour conséquence un résultat inattendu.

    Cela dit j'ai un cadeau pour toi, vu que tu sembles aimer la console.
    Il s'agit de «cds», c'est comme la commande «cd» avec quelques particularités en plus.

    package: cds.zip
    MD5=27b14a94c1b7e38f695d2bf9e2148edf
    lien= http://www.mediafire.com/download.php?dkhzy3kttim

    exemple d'utilisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ::pour aller vers le dossier courant ou le dernier dossier ouvert dans l'interface graphique (explorer):
    cds 
    
    ::pour retourner au précédent dossier:
    cds /ret
    
    ::pour aller dans un quelconque dossier: 
    cds chemin du dossier
    
    ::pour lancer «cds» depuis la boite de dialogue Exécuter du menu démarrer:
    cmd /k cds
    C'est vieux, ça a été fait à la va-vite (b0.0.0.1), mais ça marche toujours aussi bien.
    Bon amusement.

  13. #13
    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 maxim_um et merci pour le cadeau
    Citation Envoyé par maxim_um Voir le message
    'set var' oui, mais s'il y a plus d'une variable commençant par la chaine "var", cela aura pour conséquence un résultat inattendu.
    la variable var n'était qu'un exemple, elle pouvait être un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set [var]=
    set ..var=
    set $_=
    set ^^=
    set 0123456=
    ..etc
    Citation Envoyé par maxim_um Voir le message
    Cela dit j'ai un cadeau pour toi, vu que tu sembles aimer la console.
    Il s'agit de «cds», c'est comme la commande «cd» avec quelques particularités en plus.

    package: cds.zip
    MD5=27b14a94c1b7e38f695d2bf9e2148edf
    lien= http://www.mediafire.com/download.php?dkhzy3kttim
    pour ma part j'utilise rarement des utilitaires tiers dans mes codes...c'est un choix que j'ai fait..mais pour ton cadeau j'essayerai d'en faire une exception

  14. #14
    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 I'm_HERE Voir le message
    pour ma part j'utilise rarement des utilitaires tiers dans mes codes
    En fait, il n'est pas censé être utilisé dans un script. C'est juste une alternative plus flexible que «CMD Prompt Here PowerToy» (CmdHere.inf, CmdHere, Cmd_Here) qui permet de se mouvoir plus efficacement dans l'arborescence des dossiers. Ça peut être vu comme une sorte d'interface avec le Shell graphique de Windows. Son usage se fait donc essentiellement depuis la console. Voilà, C'est tout.

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