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 :

extraire une partie d'un chemin [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Par défaut extraire une partie d'un chemin
    Bonjour,

    j'ai un fichier txt comprennant une liste de fichier avec leur chemin absolu que j'ai créé comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dir /b /s "rep" > list.txt
    mes chemins sont du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C:\rep\Mes Docs\blabla\Travail\projet1\fichier1.txt
    C:\rep\save\Travail\projet3\fichierX.txt
    j'amerais transformer les chemins dans mon fichier en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Travail\projet1\fichier1.txt
    Travail\projet3\fichierX.txt
    dans mon exemple "Travail" est une référence pour découper mes chemins

    merci d'avance

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Regarde ce sujet, et le batch que j'y donne. Le sous-programme ":rmvpath" fait très exactement ce que tu demandes, il te suffit donc de l'appeler comme "filtre" de ton fichier de base.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre Expert
    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
    Par défaut
    Citation Envoyé par s7even Voir le message
    Bonjour,

    j'ai un fichier txt comprennant une liste de fichier avec leur chemin absolu que j'ai créé comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dir /b /s "rep" > list.txt
    mes chemins sont du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C:\rep\Mes Docs\blabla\Travail\projet1\fichier1.txt
    C:\rep\save\Travail\projet3\fichierX.txt
    j'amerais transformer les chemins dans mon fichier en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Travail\projet1\fichier1.txt
    Travail\projet3\fichierX.txt
    dans mon exemple "Travail" est une référence pour découper mes chemins

    merci d'avance
    Salut,

    ta question manque de précision:


    si la structure de tes chemins est toujours de la forme:

    exemple 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x:\ton\chemin\Travail\projetx\file1.ext
    x:\un\autre\chemin\Travail\projetx\file2.ext
    alors tu peux utiliser ce bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    setlocal enabledelayedexpansion
    for /f "delims=" %%i in (test.txt) do (
      set "c=%%i"
      set "c=!c:*Travail=Travail!" 
      echo !c!
    )
    goto:EOF
    par contre, si tu veux reculer dans ton chemin en position -3 (reculer 3 position en arrière peux importe les noms des répertoires):

    exemple 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    C:\folder 1\images 1\jpeg\Cosmos\Gallery 1\f_2\image 1.jpg
    D:\folder 2\images 2\Gifs\image 1.gif
    alors voici une compilation de code: (pour télécharger "SED" et "GAWK" voir ma signature)

    en native

    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
    for /f "delims=" %%o in ('type "infile.txt"') do call:parsePath %%o
    exit /b 1
    
    :parsePath 
    setlocal enabledelayedexpansion
     set/a_nmb=0
     set "_path=%*"
     set c=!_path!
    :loop
     set "c=!c:~0,-1!"
     if [!c:~-1!] neq [\] (goto:loop) else (set/a_nmb+=1)
     if [!_nmb!] lss [3]  (goto:loop)
     set "_path=!_path:%c%=!"
     echo %_path%
    Endlocal & exit /b 0
    GnuAwk version 3.1.6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gawk -F\ "{print $(NF-2),$(NF-1),$NF}" OFS="\\" test.txt
    tu peux utiliser Gawk comme filtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dir /b /s /a-d "rep" | gawk -F\ "{print $(NF-2),$(NF-1),$NF}" OFS="\\"
    GnuSed version 4.2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /f "delims=" %%_ in ('sed -r ^"so.*\\^(.*\\.*\\.*\.*^)o\1o^" test.txt') do echo %%_
    tu peux aussi utiliser Sed comme filtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dir /b /s /a-d "rep" | sed -r "so.*\\(.*\\.*\\.*\.*)o\1o"

    Batch Hybride
    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
    @echo off >~.vbs
    
    echo>>~.vbs set obj = createobject("scripting.filesystemobject")
    echo>>~.vbs txtfile = "test.txt"
    echo>>~.vbs set objfile = obj.opentextfile(txtfile)
    echo>>~.vbs do until objfile.atendofline
    echo>>~.vbs   csv = split(strReverse(objfile.Readline),"\")
    echo>>~.vbs   wsh.echo strReverse(csv(0)^&"\"^&csv(1)^&"\"^&csv(2))
    echo>>~.vbs loop
    echo>>~.vbs objfile.close
    
    for /f "tokens=*" %%i in ('cscript/nologo ~.vbs') do echo %%i
    del ~.vbs
    pause

  4. #4
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Par défaut
    merci a tous les 2 je vais regarder ca en détails

    et désolé si ma question manque de precision, en fait en theorie il peut y avoir n'importe quoi devant "Travail" c'est pourquoi je m'en sert comme référence car je sais que ce que je veux se trouve apres

    je débute en prog donc je vais eplucher ce que vous m'avez donner et je reviendrais poser des quetion ou mettre résolu ^^


    EDIT : j'ai utilisé ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    setlocal enabledelayedexpansion
    for /f "delims=" %%i in (test.txt) do (
      set "c=%%i"
      set "c=!c:*Travail=Travail!" 
      echo !c!
    )
    goto:EOF
    et ca fonctionne à merveille merci beaucoup

    j'aimerais juste avoir quelques precisions :
    - c'est quoi le enableDelayedExpansion ? quelle est sa fonction ?
    - à quoi servent les " dans set "c=%%i" ?
    - à quoi servent les ! dans echo !c! ?

    merci d'avance

  5. #5
    Membre Expert
    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
    Par défaut
    Citation Envoyé par s7even Voir le message
    - c'est quoi le enableDelayedExpansion ? quelle est sa fonction ?
    - à quoi servent les ! dans echo !c! ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for %? in (Setlocal cmd) do hh ntcmds.chm::/%?.htm
    Citation Envoyé par s7even Voir le message
    - à quoi servent les " dans set "c=%%i" ?
    dans ton cas: pour ne pas avoir de mauvaises surprises lors de la lecture de ta variable à cause "des espaces de plus+les caractères reservés"

  6. #6
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Par défaut
    [QUOTE=I'm_HERE;4835670]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for %? in (Setlocal cmd) do hh ntcmds.chm::/%?.htm


    excuse moi j'ai je ne vois pas trop le rapport entre ma question et ta reponse

    j'aimerais juste une petit explication en texte afin de ne pas copier du code betement sans rien comprendre.

    c'est peut etre evident pour toi ...

  7. #7
    Membre Expert
    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
    Par défaut
    [quote=s7even;4837561]
    Citation Envoyé par I'm_HERE Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for %? in (Setlocal cmd) do hh ntcmds.chm::/%?.htm


    excuse moi j'ai je ne vois pas trop le rapport entre ma question et ta reponse

    j'aimerais juste une petit explication en texte afin de ne pas copier du code betement sans rien comprendre.

    c'est peut etre evident pour toi ...
    salut,

    tu tapes dans l'invite de commandes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for %? in (Setlocal cmd) do hh ntcmds.chm::/%?.htm

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

Discussions similaires

  1. Extraire une partie d'un string
    Par Bloodscalp dans le forum Langage
    Réponses: 9
    Dernier message: 20/09/2006, 10h43
  2. Réponses: 7
    Dernier message: 18/07/2006, 14h56
  3. Réponses: 2
    Dernier message: 21/05/2006, 19h31
  4. extraire une partie d'image d'une image source
    Par Zen_Fou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/01/2006, 11h20
  5. extraire une partie d'un document rtf
    Par yac dans le forum Oracle
    Réponses: 12
    Dernier message: 08/01/2006, 10h44

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