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 :

variables d'environement dans un .bat


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut [Resolu] variables d'environement dans un .bat
    Bonjour,
    j'ai un petit probleme quand j'essaie de créer un .bat qui lance xcopy %Appdata%\etc... : le chemin est passé en version longue (sans les tildes ~), du coup je me retrouve avec un message "wrong number of arguments". Et quand je tape directement la commande dans la fenetre DOS ça marche...
    bref aidez moi svp :~(

    D'avance Merki.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 69
    Points : 83
    Points
    83
    Par défaut
    Bonjour,
    essaie de mettre 2 %
    %%Appdata%%

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    heu non... ça lance %appdata% comme commande dos et il comprend pas.
    impossible de trouver le fichier "%Appdata%" qu'il me dit.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 69
    Points : 83
    Points
    83
    Par défaut
    Excuse-moi
    "wrong number of arguments"
    tu peux donner toute la ligne qui contient : xcopy %APPDATA%.......

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    emploi des côtes pour utiliser des noms long dans un batch
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "%LDTOOLS%\Bin\sc.exe" query %1>"%Service_File%%1.TXT"
    Par contre si tu passes un nom long en paramétre d'un batch
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call traite.cmd "c:\program file\perso\f.txt"
    dans ce cas %1 peut être utilisé directement en paramétre d'un batch 'imbriqué' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @echo off
    rem Traite.cmd 
    Call sousprg.cmd %1

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 69
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par Laurent Dardenne
    Salut,
    emploi des côtes pour utiliser des noms long dans un batch
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "%LDTOOLS%\Bin\sc.exe" query %1>"%Service_File%%1.TXT"
    Par contre si tu passes un nom long en paramétre d'un batch
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call traite.cmd "c:\program file\perso\f.txt"
    dans ce cas %1 peut être utilisé directement en paramétre d'un batch 'imbriqué' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @echo off
    rem Traite.cmd 
    Call sousprg.cmd %1
    Excuse-moi Laurent je ne veux te contrarier mais pour moi il aurait passé trop ou peu d'arguments à xcopy d'où :
    "wrong number of arguments"

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par malek
    Excuse-moi Laurent je ne veux te contrarier
    Me contrarier je ne pense pas, mais me contredire tu peux

    Les noirs ont le trait, la parole est à Merkutio

  8. #8
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci a tous les deux
    Malek : je pense que le message "wrong number of arguments" est causé par les espaces dans le nom long, du coup apres chaque espace il doit penser que c un nounel argument.
    Laurent : tu a peut etre surestimé mon niveau mais j'ai pas tout compris a tes explications. J'ai déjà essayé les guillemets pour encadrer le chemin, dans le genre :
    ça me renvoie le chemin long dans la console.
    Je veux pas rentrer le chemin en parametre pour l'instant, donc je pense pas avoir besoin de call, mais j'ai pas saisi la partie "query", si tu peux m'éclairer... Merki

  9. #9
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Merkutio
    Malek : je pense que le message "wrong number of arguments" est causé par les espaces dans le nom long, du coup apres chaque espace il doit penser que c un nounel argument.

    Citation Envoyé par Merkutio
    Laurent : tu a peut etre surestimé mon niveau
    pas du tout, les batch c'est simple il suffit juste d'avoir le niveau d'information adéquate
    Citation Envoyé par Merkutio
    j'ai pas saisi la partie "query", si tu peux m'éclairer
    C'était juste pour l'exemple, un Copier/Coller.
    Sinon dans le contexte il s'agit de retrouver l'état d'un service Oracle puis de ...
    Pour aller plus loin
    http://www.ldardenne.freesurf.fr/data/fichiers/ldtools.zip

    Pour en revenir à ton probléme tu peux utiliser ceci
    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
    21
    22
    @echo off
     rem GetShortFileName.cmd
     
     rem renvoie un nom de fichier court dans le nom de variable d'environnement passée en paramétre %1
     rem dans le cas ou un prg attend un paramétre nom de fichier de type FAT16
     rem les espaces contenus dans son nom peuvent poser PB.
     rem si un espace existe dans le nom de fichier, ce nom de fichier seras vu comme N paramétres
     
     rem %1 = nom de fichier. 
     rem %2 = nom de variable d'environnement. 
     rem 
     rem exemple :
     rem 
     rem GetShortFileName "c:\t r\1234567890.txt"  SFileName
     rem Renvoie, selon le contexte, SFileName=C:\RT01DA~1\123456~1.TXT
    set V1=%2 rem récupére le nom de la varible d'environnement
    for /F "tokens=*" %%I in ('echo %1') do set %V1%=%%~sI
    
    rem set %V1%= déclare une variable portant le nom contenu dans la variable local V1, c'est un peu tordu mais avec les batch NT c'est comme ça !
    
    set V1=
    Et tu l'appel ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set StatusFName=%WorkDirectory%\SID_STATUS.TXT
    Call "%LDTOOLS%\GetShortFileName.cmd" "%StatusFName%" ShortFNStatus
    La variable d'environnement ShortFNStatus contenant le nom court du fichier
    Pour les explications For /?
    ça roule ?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 69
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par malek
    tu peux donner toute la ligne qui contient : xcopy %APPDATA%.......
    Tu n'as toujours pas donner la ligne de commande mais bon ce n'est grave.
    Je te propose une solution, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cd %appdataù\aaa\zzz
    xcopy .\%destination% %ok% /y/e/r/h/d

  11. #11
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Alors voila mon code nettoyé des commentaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set V1=%2 
    for /F "tokens=*" %%I in ('echo %1') do set %V1%=%%~sI
    set %V1%=
    cd %court%
    pause
    appelé par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    call test.bat "%Appdata%" court
    cd "%court%"
    cd %V1%
    pause
    et voila le résultat :



    J'ai ptet fait une erreur, mais il a pas l'air de se souvenir des variables...

    Ah oui malek j'ai plus la ligne de code mais ça devait etre ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xcopy "%Appdata%\dossier1" E:\copie /S /E /T

  12. #12
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Merkutio
    J'ai ptet fait une erreur, mais il a pas l'air de se souvenir des variables...
    Oui tu supprimes ce que tu viens juste de créer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set V1=%2 
    for /F "tokens=*" %%I in ('echo %1') do set %V1%=%%~sI
    set V1=
    cd %court%
    pause
    C'est
    , supprime la variable de travail ( 'local' )
    et pas
    qui supprime la variable 'global', celle que tu souhaites créée et utiliser par la suite

  13. #13
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci bien, ça marche nikel

  14. #14
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Peux-tu placer ton message en résolu ?

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

Discussions similaires

  1. [Batch] Variables globales dans script bat
    Par noOneIsInnocent dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 27/03/2015, 22h28
  2. [1.x] variables environement dans sf
    Par domino974 dans le forum Symfony
    Réponses: 1
    Dernier message: 06/09/2011, 19h52
  3. utiliser une variable d'environement Windows dans un script
    Par pierre.zelb dans le forum VBScript
    Réponses: 2
    Dernier message: 29/11/2006, 16h50
  4. [Runtime] Récupération d'une variable fixée dans un .bat
    Par seiryujay dans le forum API standards et tierces
    Réponses: 18
    Dernier message: 16/10/2006, 18h57
  5. Réponses: 5
    Dernier message: 13/08/2004, 16h40

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