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 :

récupération de param et execution de commandes [Batch]


Sujet :

Scripts/Batch

  1. #1
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut récupération de param et execution de commandes
    Bonjour j'ai un batch dont je ne comprends pas le comportement

    Code BATCH : 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
    23
    @REM Script de récupération d'artifact.
    @ECHO ON
    if  "%1" == ""  (echo usage: %0 groupId artefactId version [type [classifier]]) else (
      set groupId=%1
      set artifactId=%2
      set version=%3
      if  "%4" == ""  (set typeFile=jar) else (set typeFile=%4)
      if  "%5" == ""  (set classifier=) else (set classifier=-Dclassifier=%5)
     
     
      set destinationJar=%~dp0%artifactId%-%version%.%typeFile%
     
      echo %classifier%
      rem mvn help:effective-pom -Paphp-dev-livraison -f %~dp0\CopyArtifact.pom
     
      echo Récupération du %typeFile% %artifactId%-%version%
      call mvn dependency:get -q -f %~dp0\CopyArtifact.pom -Paphp-dev-livraison -DgroupId=%groupId% -DartifactId=%artifactId% -Dversion=%version% -Ddest=%destinationJar% -Dpackaging=%typeFile% -Dtransitive=false %classifier%
     
      echo Installation sur le repo %typeFile%
      call mvn deploy:deploy-file -q -f %~dp0\CopyArtifact.pom -Paphp-dev-livraison -DrepositoryId=${deploymentRepositoryId} -Durl=${deployementRepositoryUrl} -Dfile=%destinationJar% -DgroupId=%groupId% -DartifactId=%artifactId% -Dversion=%version% -Dpackaging=%typeFile% -DgeneratePom=false %classifier%
     
      rm -R %~dp0%artifactId%-%version%.%typeFile%
    )

    mon problème se situe aux lignes 17 et 20 et concerne la variable destinationJar
    si j'exécute une première fois mon script ainsi
    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
    D:\Travail\Olympe\temp>CopyArtifact fr.aphp.ati.eai.hermes ng484-ageps-out 1.0.0
    
    D:\Travail\Olympe\temp>SETLOCAL
    
    D:\Travail\Olympe\temp>if "fr.aphp.ati.eai.hermes" == "" (echo usage: CopyArtifact groupId artefactId version [type [classifier]] )  else (
    set groupId=fr.aphp.ati.eai.hermes
     set artifactId=ng484-ageps-out
     set version=1.0.0
     if "" == "" (set typeFile=jar )  else (set typeFile= )
     if "" == "" (set classifier= )  else (set classifier=-Dclassifier= )
     set destinationJar=D:\tools\org\apache\maven\3.0.3\bin\-.
     echo
     rem mvn help:effective-pom -Paphp-dev-livraison -f D:\tools\org\apache\maven\3.0.3\bin\\CopyArtifact.pom
     echo Récupération du  -
     call mvn dependency:get -q -f D:\tools\org\apache\maven\3.0.3\bin\\CopyArtifact.pom -Paphp-dev-livraison -DgroupId= -DartifactId= -Dversion= -Ddest= -Dpackaging= -Dtransitive=false
     echo Installation sur le repo
     call mvn deploy:deploy-file -q -f D:\tools\org\apache\maven\3.0.3\bin\\CopyArtifact.pom -Paphp-dev-livraison -DrepositoryId=${deploymentRepositoryId} -Durl=${deployementRepositoryUrl} -Dfile= -DgroupId= -DartifactId= -Dversion= -Dpackaging= -DgeneratePom=false
     rm -R D:\tools\org\apache\maven\3.0.3\bin\-.
    )
    Commande ECHO activée.
    Récupération du  -
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.4:get (default-cli) on project copy-artifact: Execution default-cli of goal org...
    Je constate dans la trace qu'il fait bien un set
    de groupId artifactId et version mais juste après lorsque qu'il fait set destinationJar=%~dp0%artifactId%-%version%.%typeFile%ni %artifactId% n i%version% ne sont substitués
    le reste de l'exécution a le même comportement.

    si j'appelle le même script j'ai cette fois
    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
    D:\Travail\Olympe\temp>CopyArtifact fr.aphp.ati.eai.hermes ng484-ageps-out 1.0.0
    
    D:\Travail\Olympe\temp>if "fr.aphp.ati.eai.hermes" == "" (echo usage: CopyArtifact groupId artefactId version [type [classifier]] )  else (
    set groupId=fr.aphp.ati.eai.hermes
     set artifactId=ng484-ageps-out
     set version=1.0.0
     if "" == "" (set typeFile=jar )  else (set typeFile= )
     if "" == "" (set classifier= )  else (set classifier=-Dclassifier= )
     set destinationJar=D:\tools\org\apache\maven\3.0.3\bin\ng484-ageps-out-1.0.0.jar
     echo
     rem mvn help:effective-pom -Paphp-dev-livraison -f D:\tools\org\apache\maven\3.0.3\bin\\CopyArtifact.pom
     echo Récupération du jar ng484-ageps-out-1.0.0
     call mvn dependency:get -q -f D:\tools\org\apache\maven\3.0.3\bin\\CopyArtifact.pom -Paphp-dev-livraison -DgroupId=fr.aphp.ati.eai.hermes -DartifactId=ng484-ageps-out -Dversion=1.0.0 -Ddest=D:\tools\org\apache\maven\3.0.3\bin\-. -Dpackaging=jar -Dtransitive=false
     echo Installation sur le repo jar
     call mvn deploy:deploy-file -q -f D:\tools\org\apache\maven\3.0.3\bin\\CopyArtifact.pom -Paphp-dev-livraison -DrepositoryId=${deploymentRepositoryId} -Durl=${deployementRepositoryUrl} -Dfile=D:\tools\org\apache\maven\3.0.3\bin\-. -DgroupId=fr.aphp.ati.eai.hermes -DartifactId=ng484-ageps-out -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=false
     rm -R D:\tools\org\apache\maven\3.0.3\bin\ng484-ageps-out-1.0.0.jar
    )
    Commande ECHO activée.
    Récupération du jar ng484-ageps-out-1.0.0
    Installation sur le repo jar
    rm: cannot unlink entry "D:/tools/org/apache/maven/3.0.3/bin/ng484-ageps-out-1.0.0.jar": Le fichier spécifié est introuvable.
    cette fois destinationJar reçois la bonne valeur mais elle n'est pas utilisé par la suite l'appel suivant avec des paramètres différents donne
    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
    D:\Travail\Olympe\temp>CopyArtifact fr.aphp.ati.eai.hermes ng484-hegp-out 1.0.0
    
    D:\Travail\Olympe\temp>if "fr.aphp.ati.eai.hermes" == "" (echo usage: CopyArtifact groupId artefactId version [type [classifier]] )  else (
    set groupId=fr.aphp.ati.eai.hermes
     set artifactId=ng484-hegp-out
     set version=1.0.0
     if "" == "" (set typeFile=jar )  else (set typeFile= )
     if "" == "" (set classifier= )  else (set classifier=-Dclassifier= )
     set destinationJar=D:\tools\org\apache\maven\3.0.3\bin\ng484-ageps-out-1.0.0.jar
     echo
     rem mvn help:effective-pom -Paphp-dev-livraison -f D:\tools\org\apache\maven\3.0.3\bin\\CopyArtifact.pom
     echo Récupération du jar ng484-ageps-out-1.0.0
     call mvn dependency:get -q -f D:\tools\org\apache\maven\3.0.3\bin\\CopyArtifact.pom -Paphp-dev-livraison -DgroupId=fr.aphp.ati.eai.hermes -DartifactId=ng484-ageps-out -Dversion=1.0.0 -Ddest=D:\tools\org\apache\maven\3.0.3\bin\ng484-ageps-out-1.0.0.jar -Dpackaging=jar -Dtransitive=false
     echo Installation sur le repo jar
     call mvn deploy:deploy-file -q -f D:\tools\org\apache\maven\3.0.3\bin\\CopyArtifact.pom -Paphp-dev-livraison -DrepositoryId=${deploymentRepositoryId} -Durl=${deployementRepositoryUrl} -Dfile=D:\tools\org\apache\maven\3.0.3\bin\ng484-ageps-out-1.0.0.jar -DgroupId=fr.aphp.ati.eai.hermes -DartifactId=ng484-ageps-out -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=false
     rm -R D:\tools\org\apache\maven\3.0.3\bin\ng484-ageps-out-1.0.0.jar
    )
    Commande ECHO activée.
    Récupération du jar ng484-ageps-out-1.0.0
    Installation sur le repo jar
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.5:deploy-file (default-cli) on project copy-artifact: Failed to deploy artifacts: Could not transfer artifact fr.aphp.ati.eai.hermes:ng484-ageps-out:jar:1.0.0 from/to qualif (http://sap-nexus.sap.aphp.fr:8081/nexus/content/repositories/qualif/): Access denied to: http://sap-nexus.sap.aphp.fr:8081/nexus/content/repositories/qualif/fr/aphp/ati/eai/hermes/ng484-ageps-out/1.0.0/ng484-ageps-out-1.0.0.jar -
    cette fois la variable artifactId reçoi la bonne valeur mais destinationJar est construit avec les valeur de l'appel précédent et
    c'est cette valeur qui est utilisé.

    Je suis preneur de toutes suggestion car je ne connais pas bien le DOS
    Merci à tous
    A+JYT

  2. #2
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Salut,

    C'est à cause de l'expansion retardée des variables d'environnement que tu n'as pas activé, c'est nécessaire quand tu abuses des imbrications ()... et qu'une lecture (ou expansion de variables) est demandée... C'est une question très récurrente qui a été mainte fois traitée... du coup, en général on y répond pas, sauf exception comme ici

    Pour plus d'infos, tu peux consulter l'aide de set /? et setlocal /?, ou mieux, faire une recherche sur ce même forum, il y a un poste qui en explique en détail le fonctionnement...

    La deuxième solution coule donc de source... et aussi pense à bien encadrées tes affectations pour être sûre qu'aucun espace ne s'incrustera par mégarde... set "var=value"
    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
    23
    @REM Script de récupération d'artifact.
    @ECHO ON
    if  "%1" == "" (
      echo.& echo.usage: %0 groupId artefactId version [type [classifier]]& echo.& pause& goto :eof)
      set "groupId=%1"
      set "artifactId=%2"
      set "version=%3"
      if  "%4" == ""  (set "typeFile=jar") else set "typeFile=%4"
      if  "%5" == ""  (set "classifier=") else set "classifier=-Dclassifier=%5"
    
    
      set "destinationJar=%~dp0%artifactId%-%version%.%typeFile%"
    
      @echo.%classifier%
      rem mvn help:effective-pom -Paphp-dev-livraison -f %~dp0\CopyArtifact.pom
    
      echo Récupération du %typeFile% %artifactId%-%version%
      call mvn dependency:get -q -f %~dp0\CopyArtifact.pom -Paphp-dev-livraison -DgroupId=%groupId% -DartifactId=%artifactId% -Dversion=%version% -Ddest=%destinationJar% -Dpackaging=%typeFile% -Dtransitive=false %classifier%
    
      echo Installation sur le repo %typeFile%
      call mvn deploy:deploy-file -q -f %~dp0\CopyArtifact.pom -Paphp-dev-livraison -DrepositoryId=${deploymentRepositoryId} -Durl=${deployementRepositoryUrl} -Dfile=%destinationJar% -DgroupId=%groupId% -DartifactId=%artifactId% -Dversion=%version% -Dpackaging=%typeFile% -DgeneratePom=false %classifier%
    
      rm -R %~dp0%artifactId%-%version%.%typeFile%

  3. #3
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Merci

    J'ai cherché sur le forum mais comme je ne savait pas de quoi cela venait je ne savait pas quoi chercher et je n'ai donc pas trouvé

    j'ai essayé de mettre setlocal en début de script mais du coup plus aucune variable n'était affectées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    D:\Travail\Olympe\temp>CopyArtifact fr.aphp.ati.eai.hermes ng484-ageps-out 1.0.0
    
    D:\Travail\Olympe\temp>if "fr.aphp.ati.eai.hermes" == "" (echo usage: CopyArtifact groupId artefactId version [type [classifier]] )  else (
    set groupId=""
     set artifactId=""
    comme si %1 et %2 n'etais plus visible
    j'ai conclus trop vite que ce n'était pas la bonne voie
    Y a-t-il un cours, un article, un tuto quelque part.
    car le batch DOS ce n'est vraiment pas mon truc et je ne sais pas du tout où chercher

    Merci
    A+JYT

  4. #4
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Il faut que tu postes le script en question... avec le setlocal...

    Pour les cours ou tutos, pour débuter, tu peux regarder :

    cette traduction
    le fichier "ntcmds.chm"
    la "référence de la ligne de commande" sur le site de microsoft/msdn ou technet...
    et l'aide en ligne

    Sinon, as-tu lancé le script modifié ?

  5. #5
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    J'ai changé mon fusil d'épaule.
    j'ai abandoné le bat et je suis passé à jscript.
    je maitrise le langage (EcmaScript) et en cherchant dans le doc de MSN il n'a pas été dificile de trouver les objets windows à manipuler pour arriver au bon résultat.
    disposer de structure de contrôle éfficace de try catch et d'objets "modernes" m'a permit de parvenir à mes fin sans difficulté

    j'exécute le tout avec cscript.exe

    A+JYT

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/09/2008, 20h40
  2. [Debutant(e)][Système]Executer une commande DOS
    Par iceman dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 18/05/2004, 14h30
  3. [.bat][FOR][IF]executer plusieurs commandes a la suite
    Par ¤FRIX¤ dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 23/03/2004, 09h24
  4. odre d'execution de commande
    Par marsupile dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/02/2004, 13h57
  5. Réponses: 3
    Dernier message: 02/09/2002, 18h49

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