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

Windows Discussion :

[Batch] Coder sur plusieurs lignes


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 14
    Points : 10
    Points
    10
    Par défaut [Batch] Coder sur plusieurs lignes
    Bonjour,

    Question très simple mais dont je n'ai pas trouvé la réponse... (et j'ai cherché mais surement pas avec les bons mots)

    Je voudrais savoir comment on écrit UNE instruction sur DEUX lignes

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    copy /b fic1.log+fic2.log+fic3.log
    
    devient : 
    
    copy /b fic1.log
    +fic2.log+fic3.log
    Merci d'avance

  2. #2
    Membre expérimenté
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Points : 1 557
    Points
    1 557
    Par défaut
    Bonjour

    Il ne me semble pas que cela soit possible. Par curiosité, dans quel but voudrais tu écrire tes commandes sur plusieurs lignes ?
    Avant de poster, merci de consulter les règles du forum

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    En fait j'effectue une concaténation d'une 40aine de fichiers et les adresses et le nombre de caractères arrive à 2200...

    Mais maintenant que j'écris ces lignes, je me rend compte que c'est surement le buffer du cmd qui est limité !

    Sinon pour détourner mon problème, je concatène les fichiers via un fichier temporaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Temp1 <- Fic1 + Fic2
    Temp2 <- Temp1 + Fic3
    Temp3 <- Temp2 + Fic4
    Le problème c'est que niveau optimisation, ca frize le moissonnage de champs de blé avec des baguettes chinoises

  4. #4
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par Jokeur
    Le problème c'est que niveau optimisation, ca frize le moissonnage de champs de blé avec des baguettes chinoises
    Essaies le coupe-ongle, c'est mieux affuté.


    Citation Envoyé par Jokeur
    Sinon pour détourner mon problème, je concatène les fichiers via un fichier temporaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Temp1 <- Fic1 + Fic2
    Temp2 <- Temp1 + Fic3
    Temp3 <- Temp2 + Fic4
    Pour limiter le gaspillage d'espace, tu dois pouvoir te limiter à l'utilisation de deux fichiers temporaires utilisés en alternance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Temp1 <- Fic1
    Temp2 <- Temp1 + Fic2
    Temp1 <- Temp2 + Fic3
    Temp2 <- Temp1 + Fic4
    Temp1 <- Temp2 + Fic5
    ...
    Bon courage
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Nouveauté pour les gens qui ne connaissent pas le contenu du dossier contenant les fichiers à concaténer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    echo for %%%%v in &#40; >tmp.bat
    dir c&#58;\MonChemin\ /s /b /o >>tmp.bat
    echo &#41;do for /f "delims=" %%%%a in &#40;%%%%v&#41; do echo %%%%a ^>^> c&#58;\MonChemin\MonFichier.txt >>tmp.bat
    
    call tmp.bat
    del tmp.bat

  6. #6
    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
    tu peux détailler/documenter ton script ?
    Il y a 2-3 choses intéressantes...
    Merci.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Alors une description-explication du code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    echo for %%%%v in &#40; >tmp.bat
    dir c&#58;\MonChemin\ /s /b /o >>tmp.bat
    echo &#41;do for /f "delims=" %%%%a in &#40;%%%%v&#41; do echo %%%%a ^>^> c&#58;\MonChemin\MonFichier.txt >>tmp.bat
    
    call tmp.bat
    del tmp.bat
    L'objectif est de concaténer des fichiers contenus dans un dossier et ses sous dossier.

    Pour que ce code soit générique, je crée un fichier tmp.bat qui va stocker le code dynamique et ensuite être exectuté puis supprimé.
    C'est pour cela qu'on retrouve les redirections des echo.

    Le code généré (tmp.bat) donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for %%v in &#40;
    ici on retrouve la liste de tous les fichiers du repertoire et des sous répertoires
     &#41;do for /f "delims=" %%a in &#40;%%v&#41; do echo %%a >> c&#58;\MonChemin\MonFichier.txt
    Le %%v nous passe tous les fichiers trouvés et le %%a nous passe chacune des lignes.

    Les astuces à connaitres sont pour passer "%%" et les ">>" dans le codé générique : doubler les % (%%%% donne %%) et utiliser ^ pour ne pas interpréter le caractère suivant (^>^> donne >>)

    Une technique BEAUCOUP plus rapide pour passer les fichiers et de ne pas utiliser une seconde boucle avec des echo mais d'utiliser la commande type (et en plus c'est plus simple) ce qui donne en final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    echo for %%%%v in &#40; >tmp.bat
    dir c&#58;\MonChemin\ /s /b /o >>tmp.bat
    echo &#41;do type %%%%v ^>^> c&#58;\MonChemin\MonFichier.txt >>tmp.bat
    
    call tmp.bat
    del tmp.bat
    Pour être plus générique on peut bien sur passer des paramètres pour les chemins et les fichiers.

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

Discussions similaires

  1. Coder sur plusieurs lignes ?
    Par siva27 dans le forum Débuter
    Réponses: 10
    Dernier message: 30/10/2013, 12h49
  2. Response.Write sur plusieurs lignes
    Par simoryl dans le forum ASP
    Réponses: 2
    Dernier message: 31/08/2004, 22h49
  3. Réponses: 2
    Dernier message: 10/05/2004, 07h55
  4. TDBGrid - Un enregistrement sur plusieurs lignes
    Par BRODU dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/05/2004, 07h53
  5. Define sur plusieurs lignes
    Par Gogoye dans le forum C
    Réponses: 6
    Dernier message: 06/10/2003, 11h45

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