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 :

message d'erreur lors d'un remplacement de chaine dans une boucle for


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur Infrastructure
    Inscrit en
    Juin 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur Infrastructure
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2020
    Messages : 3
    Par défaut message d'erreur lors d'un remplacement de chaine dans une boucle for
    Bonjour à tous je suis nouveau sur le forum et je débute en batch. Je suis bloqué sur un script mon but est de supprimer une chaine de caractère dans une série de fichiers passés en paramètre grace à un call dans une boucle for voici mon script :
    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
    @echo off
    REM création des fichiers de travail
    	set fichierCommandes=C:\Script\Resultats\commandes.txt
    	set fichierReq=C:\Script\Resultats\Req_
    	set fichierTemp=C:\Script\Resultats\Temp_
     
    REM appel au fichiers de requetes a exécuter
    	set fichiersql=C:\Script\Generation_XML.sql
     
    REM positionnement dans le répertoire dans le quel les fichiers résultat seront
    	cd C:\Script
     
    REM lecture des commandes
    for /f "delims=" %%i in ('type %fichierCommandes%') do (
    	sqlcmd -y 0 -S mabase -v NumCommande ="%%i" -i %fichiersql% -o %fichierReq%%%i
    	call remplace.cmd "
" "" %fichierReq%%%i>%fichierTemp%%%i
    )
    PAUSE

    le code de mon programme remplace.cmd :

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    REM @echo off
    SETLOCAL ENABLEEXTENSIONS
    SETLOCAL DISABLEDELAYEDEXPANSION
     
    if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
    for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
    	set "line=%%B"
    	if defined line (
    		call set "line=echo.%%line:%~1=%~2%%"
    		for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
    	) ELSE echo.
    )

    le contenu de mon fichier commande.txt :
    760336
    761672

    j'obtiens comme message : "La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte."

    Je sais que le problème ne vient pas de mon appel à sqlcmd car mes deux fichiers "Req_760336" et "Req_761672" sont créés et contiennent les bonnes données. Mon but c'est juste de parcourir les deux fichiers et d'enlever la chaine "
" de chaque ligne ou elle est présente dans chacun des fichiers.

    Merci d'avance pour votre aide à tous.

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut
    [Batch] remplacement de chaine dans une boucle for
    Exemple
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @echo off
     
    SETLOCAL ENABLEDELAYEDEXPANSION
     
    for /f "tokens=* delims=" %%a in ('echo abcdefg') do (
    	set line=%%~a
    	set repl=!line:cde=xxx!
    	echo !repl!
    )
     
    pause

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur Infrastructure
    Inscrit en
    Juin 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur Infrastructure
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2020
    Messages : 3
    Par défaut
    Merci de ta réponse, du coup je me rends compte que mon titre n'était pas assez clair. En fait je veux effectuer cette opération par un appel à un programme externe à l'intérieur de ma boucle for de création de fichier à partir de sqlcmd (comme expliqué dans mon post) afin de garder le paramètre du numéro de commande (%%i). Peut-être est-ce impossible?

  4. #4
    Membre habitué Avatar de Lockan
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Avril 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2019
    Messages : 14
    Par défaut
    Bonjour,

    Juste en regardant, je vois quelque chose de suspect qui pourrait générer ton erreur :

    Dans remplace.cmd tu as type %3, sauf que si tu remontes au Call, ton %3 correspond à%fichierReq%%%i>%fichierTemp%%%i. L'erreur peut donc venir d'ici, puisque tu ne lui donnes pas un chemin mais une commande qui en comporte deux. Et l'output n'est pas utilisable comme tel.

    Essaye donc de faire cette commande avant le Call, et de lui passer seulement le chemin vers %fichierTemp%%%i pour que le type ait un paramètre au bon format.

  5. #5
    Candidat au Club
    Homme Profil pro
    Administrateur Infrastructure
    Inscrit en
    Juin 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur Infrastructure
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2020
    Messages : 3
    Par défaut
    Bonjour, merci Lockan,

    j'ai essayé, sans succès ton idée, par contre j'ai aussi essayé en remplaçant cette ligne :
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    call remplace.cmd "
" "" %fichierReq%%%i>%fichierTemp%%%i
    par celle-ci
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    call remplace.cmd "
" "" %fichierReq%%%i>>%fichierTemp%
    la fonction remplace fonctionne car j'ai bien un fichier résultat sans la chaine de caractère sauf que le contenu de mes deux fichiers initiaux est rassemblé dans un seul fichier, alors que je veux bien deux fichiers de sortie. Le problème vient du (%%i) j'ai l'impression mais je ne vois pas pourquoi.

    Merci d'avance de votre aide je m'arrache les cheveux.

Discussions similaires

  1. [Batch] Comparaison de chaine de caractères dans une boucle for
    Par dark_vidor dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 19/10/2017, 17h00
  2. Réponses: 2
    Dernier message: 02/08/2011, 18h51
  3. Réponses: 5
    Dernier message: 05/07/2011, 15h45
  4. [batch] incrémentation dans une boucle for
    Par bart64 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 08/09/2004, 21h05
  5. Réponses: 3
    Dernier message: 06/07/2004, 11h21

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