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 :

Analyser une chaine en batch [Batch]


Sujet :

Scripts/Batch

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Analyser une chaine en batch
    Bonjour,

    voilà je débute en batch, et j'essaie d'analyser une ligne d'un fichier :

    ::Je parcours ligne par ligne le fichier
    for /f "delims=" %%i in ('type fichier.txt') do (
    set ligne=%%i
    :: Ensuite, je veux parcourir cette ligne pour en extraire les mots, separes par
    :: des espaces
    for /f "delims= " %%j in (%ligne%) do (
    set mot=%%j
    echo mot
    )
    )

    Mais quand j'exécute le script, j'ai un ") was unexpected at this time"

    D'où vient l'erreur ?

    Merci.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    Bonjour
    as tu un exemple de fichier.txt ?

    une erreur vu rapidement :
    echo %mot%

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    En fait, voici l'algorithme que je cherche à passer en batch (C'est un script pour lancer des rendus à la chaine sur une ferme de serveurs, pour une appli 2D) :

    - J'ai un fichier texte contenant les chemins des fichiers à "rendre" (à traiter) :

    \\serveur\ProjectFiles\fichier_a_rendre_1.nk
    \\serveur\ProjectFiles\fichier_a_rendre_2.nk

    - Donc je parse ce fichier texte pour ouvrir chaque fichier ".nk" un à un, dont voici un exemple (je ne mets que les "blocs" qui nous intéressent => Root et Write) :

    ....
    Root {
    inputs 0
    name Q:/ProjectFiles/test_01.nk
    first_frame 1674
    last_frame 1684
    lock_range true
    fps 25
    format "1024 576 0 0 1024 576 1 Square_Pixel_PAL_16:9"
    proxy_type scale
    proxy_format "1024 576 0 0 1024 576 1 Square_Pixel_PAL_16:9"
    }
    Write {
    file Q:/ProjectFiles/test_01.%04d.jpeg
    file_type jpeg
    checkHashOnRead false
    name Write1
    selected true
    xpos -266
    ypos -195
    }

    ...

    - Dans chaque fichier ".nk", je souhaite récupérer 3 paramètres :
    - La valeur de l'attribut first_frame (du bloc Root)
    - La valeur de l'attribut last_frame (du bloc Root)
    - La valeur de l'attribut name (du bloc Write)

    - Enfin, avec ces 3 paramètres, je souhaiterais lancer un EXE depuis mon batch, pour tous les fichiers ".nk", de type :

    "C:\Program Files\Nuke5.2v3\Nuke5.2.exe" -x \\serveur\ProjectFiles\test_01_100301.154610.nk "Write1" 1675,1675


    où Write1, 1675, 1675 sont les paramètres que j'ai récupéré auparavant...

    Je ne sais pas si j'ai été très clair
    Si tel est le cas je ne suis pas loin !

    Merci pour l'aide.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    Bonjour

    y a surement mieux mais ça semble ce que tu souhaites
    Code Non testé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off
    for /f "tokens=2 DELIMS= " %%a in ('type fichier.nk^| findstr /i "first_frame"') do ( set first=%%a)
    for /f "tokens=2 DELIMS= " %%b in ('type fichier.nk^| findstr /i "last_frame"') do ( set last=%%b)
    for /f "tokens=2 DELIMS= " %%i in ('type fichier.nk^| findstr /i "Write"  ^| findstr /v "{"') do ( set writer=%%i)
    start /w "C:\Program Files\Nuke5.2v3\Nuke5.2.exe" -x \\serveur\ProjectFiles\test_01_100301.154610.nk "%writer%" %first%,%last%
    Résultat :
    "C:\Program Files\Nuke5.2v3\Nuke5.2.exe" -x \\serveur\ProjectFiles\test_01_100301.154610.nk "Write1" 1674,1684

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup, je teste ça dans l'heure.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    OK bon courage

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bon, il y a 2 choses que je ne comprends pas :

    J'ai donc ce script :

    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
    @echo off
    
    echo Voici la liste des fichiers qui vont etre traites :
    
    for /f "delims=" %%l in ('type liste_fichiers.txt') do (
    echo Fichier : %%l
    )
    
    pause
    
    for /f "delims=" %%k in ('type liste_fichiers.txt') do (
    
    echo --------------------------------------------------------------------------
    echo Fichier : %%k
    for /f "tokens=2 DELIMS= " %%a in ('type %%k^| findstr /i "first_frame"') do ( set first=%%a)
    echo First frame : %first%
    for /f "tokens=2 DELIMS= " %%b in ('type %%k^| findstr /i "last_frame"') do ( set last=%%b)
    echo Last frame : %last%
    for /f "tokens=2 DELIMS= " %%i in ('type %%k^| findstr /i "Write"  ^| findstr /v "{"') do ( set writer=%%i)
    echo Write : %writer%
    
    )

    Le résultat de l'exécution 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    C:\Documents and Settings\Administrator\Desktop>test.bat
    Voici la liste des fichiers qui vont etre traites :
    Fichier : "C:\Documents and Settings\Administrator\Desktop\FICHIERS_NK\fichier.nk"
    Fichier : "C:\Documents and Settings\Administrator\Desktop\FICHIERS_NK\fichier2.nk"
    Press any key to continue . . .
    --------------------------------------------------------------------------
    Fichier : "C:\Documents and Settings\Administrator\Desktop\FICHIERS_NK\fichier.nk"
    First frame :
    Last frame :
    Write :
    --------------------------------------------------------------------------
    Fichier : "C:\Documents and Settings\Administrator\Desktop\FICHIERS_NK\fichier2.nk"
    First frame :
    Last frame :
    Write :
    
    C:\Documents and Settings\Administrator\Desktop>test.bat
    Voici la liste des fichiers qui vont etre traites :
    Fichier : "C:\Documents and Settings\Administrator\Desktop\FICHIERS_NK\fichier.nk"
    Fichier : "C:\Documents and Settings\Administrator\Desktop\FICHIERS_NK\fichier2.nk"
    Press any key to continue . . .
    --------------------------------------------------------------------------
    Fichier : "C:\Documents and Settings\Administrator\Desktop\FICHIERS_NK\fichier.nk"
    First frame : 450
    Last frame : 450
    Write : Write5
    --------------------------------------------------------------------------
    Fichier : "C:\Documents and Settings\Administrator\Desktop\FICHIERS_NK\fichier2.nk"
    First frame : 450
    Last frame : 450
    Write : Write5
    Donc 2 questions :

    - Pourquoi à la première exécution les paramètres (First frame, Last frame, Write) sont vides et pas à la seconde ???
    - Pourquoi à la seconde exécution j'ai 2 fois les paramètres du premier fichier ? (la variable "k" change pourtant bien de valeur puisqu'on voit que le premier traitement est bien effectué sur fichier.nk et le second sur fichier2.nk...)

    Si je n'ai pas mis assez d'infos n'hésite pas.

    Merci.

  8. #8
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    Salut,

    active l'expansion retardée des variables et tout devrait rentrer dans l'ordre:

    change toutes les variable %variable% en !variable! en déclarant dans l'en-tête

    setlocal enabledelayedexpansion

    voir setlocal /?

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    It works
    Merci beaucoup à vous 2 les caids du batch !

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

Discussions similaires

  1. [RegEx] Analyser une chaine de caractères
    Par moukit233 dans le forum Langage
    Réponses: 6
    Dernier message: 31/10/2009, 12h59
  2. Analyser une chaine de caractère et la formater
    Par saad.hessane dans le forum C
    Réponses: 10
    Dernier message: 19/07/2008, 17h07
  3. [RegEx] Analyser une chaine
    Par anibal dans le forum Langage
    Réponses: 4
    Dernier message: 28/09/2007, 12h29
  4. Analyser une chaine de caractère
    Par dahu17 dans le forum C#
    Réponses: 6
    Dernier message: 23/04/2007, 14h39
  5. analyser une chaine de caractere
    Par phpaide dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/05/2006, 10h46

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