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 :

concaténation de chaînes de caractères et de variables [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Juin 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2017
    Messages : 37
    Points : 23
    Points
    23
    Par défaut concaténation de chaînes de caractères et de variables
    Bonjour,
    Je souhaite réaliser une concaténation entre des chaînes de caractères et une variable de sorte à écrire un chemin de postes en réseau pour distribuer des fichiers d'un poste A vers plusieurs postes.
    Je n'arrive pas à comprendre comment faire ...

    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
    24
    25
    @echo off
    rem définition de la liste des adresses IP
    set adresse=C:\Users\mon_user\Desktop\listeIP.txt
    rem définition de la source 
    rem set /p source= "entrez la source : "
    set source="C:\Users\mon_user\Desktop\MAJ_v2.10.2020"
     
     
    setlocal EnableDelayedExpansion
     
    rem test de connectivité avant envoi (ping avec option -n 1 pour tester un seul ping
    rem établissement du chemin réseau cible 
    for /f "delims=" %%i in (%adresse%) do (
    	ping %%i -n 1 | FIND "TTL=" > nul
     
    	 if errorlevel 1 ( echo. %%i ne ping pas 
    	 ) 	 else ( set cible= \\%%i"\c$\ProgramFiles (x86)\TEST\"
     
    	echo %cible% )
    	) 
     
     
     
    endlocal
    pause


    merci de votre aide.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Juin 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2017
    Messages : 37
    Points : 23
    Points
    23
    Par défaut
    En complément d'information :
    En fait c'est la variable %cible% qui ne donne rien dans la boucle.
    Donc soit je ne sais pas utiliser correctement echo...

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for /f "delims=" %%i in (%adresse%) do (
    	ping %%i -n 1 | FIND "TTL=" > nul
     
    	 if errorlevel 1 ( echo. %%i ne ping pas 
    	 ) 	 else ( set cible="\\%%i\c$\" )
    	echo. %cible%
    	)

    ne retourne rien ...

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 183
    Points : 5 754
    Points
    5 754
    Par défaut
    un exemple :

    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
    @echo off
    set adresse=listeIP.txt
     
    setlocal EnableDelayedExpansion
    for /f "delims=" %%i in (%adresse%) do (
    	ping %%~i -n 1 1>nul 2>nul && (
    		echo %%~i : OK
    		set "cible=\\%%~i\c$\ProgramFiles (x86)\TEST\"
    		echo Cible : !cible!) || (
    		echo %%~i : KO)
    	echo.
    )
     
    pause

  4. #4
    Membre à l'essai
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Juin 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2017
    Messages : 37
    Points : 23
    Points
    23
    Par défaut
    Bonjour,
    J'ai quelques peu évolué sur mon code mais il apparaît des anomalies certainement lié à la syntaxe lorsque je modifie le code.
    Ici par exemple (j'écris le code avec Notepad ++ qui indique que les parenthèses ne se correspondent pas (la parenthèse de la ligne 19 fait un renvoi vers la parenthèse fermante de la ligne 23).
    Pourtant le compte est bon.

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    @echo off
    color 0E
    rem définition de la liste des adresses IP
    set adresse= %~dp0\listeIP.txt
    rem définition de la source 
    rem set /p source= "entrez la source : "
    set source= %~dp0\Sim98
     
     
    setlocal EnableDelayedExpansion
     
     
     
    for /f "delims=" %%i in (%adresse%) do (
    	:: test de connectivité avant envoi (ping avec option -n 1 pour tester un seul ping
    	ping %%i -n 1 | FIND "TTL=" > nul
    	if errorlevel 1 ( echo. %%i ne ping pas ) 
    	::si erreur alors dire que ça ping pas
    	else ( 
    	:: établissement du chemin réseau cible
    		set cible="\\%%i\c$\" 
    	:: vérification de l'existence du répertoir archive et vréation si besoin
    			if not exist "%cible%\Sim98_9.4.20"  ( md "%cible%\Sim98_9.4.20" )
    			else ( echo. archive existe deja )
    	:: archivage du fichier		
    			 if exist "%cible%\Sim98\" (
    				xcopy /y /i "\\%%i\c$\Sim98\" "\\%%i\c$\Sim98_9.4.20\" 
    			 ) else ( echo. Orbis deja sauvegarde )
    	:: Envoi de la mise à jour		 
    			robocopy /E %source% "\\%%i\c$\" ) 	
    	)
     
    )	 
     
    pause 
     
    endlocal

    Et au moment de l'exécution effectivement ça ne marche pas.
    Je sèche

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 183
    Points : 5 754
    Points
    5 754
    Par défaut
    Remplace tes flags de remarque par REM
    J'ai déjà vu des cas bizarres avec ces alias ::

  6. #6
    Membre à l'essai
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Juin 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2017
    Messages : 37
    Points : 23
    Points
    23
    Par défaut
    Bonjour ericlm128,
    j'ai modifié selon ton conseil, mais pas mieux.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Juin 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2017
    Messages : 37
    Points : 23
    Points
    23
    Par défaut
    En cherchant un peu j'ai l'impression que ce sont les \ à la fin des chemins qui posent souci.
    Je les ai retirés et ça va un peu mieux.
    Un peu parce que j'ai une erreur à l'exécution = 'else' n’est pas reconnu en tant que commande interne

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    @echo off
    color 0E
    rem définition de la liste des adresses IP
    set adresse= %~dp0\listeIP.txt
    rem définition de la source 
    rem set /p source= "entrez la source : "
    set source= %~dp0\Sim98
     
     
    setlocal EnableDelayedExpansion
     
     
     
    for /f "delims=" %%i in (%adresse%) do (
    	rem test de connectivité avant envoi (ping avec option -n 1 pour tester un seul ping)
    	ping %%i -n 1 | FIND "TTL=" > nul
    	if errorlevel 1 ( echo. %%i ne ping pas 
    	) 
    	rem si erreur alors dire que ça ping pas
     
    	else ( 
    		rem établissement du chemin réseau cible
    		set cible="\\%%i\c$" 
    		rem vérification de l'existence du répertoir archive et vréation si besoin
    			if not exist "%cible%\Sim98_9.4.20"   ( md "%cible%\Sim98_9.4.20" 
    			) 
    			else ( echo. archive existe deja )
    		rem archivage du fichier		
    			if exist "%cible%\Sim98_9.4.20" (
    				xcopy /y /i "\\%%i\c$\Sim98" "\\%%i\c$\Sim98_9.4.20" 
    			) 
    			else ( echo. Orbis deja sauvegarde )
    		rem Envoi de la mise à jour		 
    		robocopy /E %source% %cible% ) 	
    )	 
     
    pause 
     
    endlocal

    Merci

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 183
    Points : 5 754
    Points
    5 754
    Par défaut
    Essaie de mettre sur la même ligne ) else (

  9. #9
    Membre à l'essai
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Juin 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2017
    Messages : 37
    Points : 23
    Points
    23
    Par défaut
    Effectivement c'est la position du else par rapport aux parenthèses!

    Merci beaucoup! c'est une subtilité que je n'ai pas comprise ...

  10. #10
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 183
    Points : 5 754
    Points
    5 754
    Par défaut
    Ne t'en veux pas, le batch est très médiocre sur la syntaxe

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

Discussions similaires

  1. Concaténation d'une chaîne de caractère dans une variable
    Par Kikibolderiz dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 20/02/2019, 11h02
  2. Concaténation de chaînes de caractères
    Par Sakapatate dans le forum Débuter
    Réponses: 15
    Dernier message: 16/06/2007, 22h19
  3. Réponses: 1
    Dernier message: 30/04/2007, 15h33
  4. Concaténation de chaîne de caractères
    Par Ardely dans le forum Delphi
    Réponses: 6
    Dernier message: 31/01/2007, 19h10
  5. concaténation de chaîne de caractère
    Par jh0483 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/08/2005, 17h10

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