Extraire le chemin d'un nom de fichier complet
Greg
-
barnabe0057 Messages postés 14455 Date d'inscription Statut Contributeur Dernière intervention -
barnabe0057 Messages postés 14455 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je travaille en Batch avec MS DOS.
J'ai une chaine de caractères telle que ça :
Mon\Chemin\Fichier.txt-1.0@Projet (1)
Sachant que le nombre de sous répertoires peut varier.
Ca peut être :
Mon\Chemin\A\Moi\Fichier.txt-1.0@Projet (2)
Je ne parviens pas à extraire le chemin brut (sans le fichier).
Je voudrais pouvoir avoir :
Mon\Chemin (ou Mon\Chemin\) dans le cas (1)
Mon\Chemin\A\Moi (ou Mon\Chemin\A\Moi\) dans le cas (2)
Quelqu'un a-t-il une solution ?
Merci d'avance.
Greg.
Je travaille en Batch avec MS DOS.
J'ai une chaine de caractères telle que ça :
Mon\Chemin\Fichier.txt-1.0@Projet (1)
Sachant que le nombre de sous répertoires peut varier.
Ca peut être :
Mon\Chemin\A\Moi\Fichier.txt-1.0@Projet (2)
Je ne parviens pas à extraire le chemin brut (sans le fichier).
Je voudrais pouvoir avoir :
Mon\Chemin (ou Mon\Chemin\) dans le cas (1)
Mon\Chemin\A\Moi (ou Mon\Chemin\A\Moi\) dans le cas (2)
Quelqu'un a-t-il une solution ?
Merci d'avance.
Greg.
A voir également:
- Extraire le chemin d'un nom de fichier complet
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Extraire une video youtube - Guide
3 réponses
Bonjour,
Il faut utiliser les commandes prévues à cet effet :
Il faut utiliser les commandes prévues à cet effet :
for /f "delims=" %%A in ("Mon\Chemin\Fichier.txt-1.0@Projet^(01^)") do echo %%~dpA
Bonjour Barnabe0057 et merci pour la réponse rapide.
Il y a un "mais".
Dans la réponse que j'obtiens avec ta solution, il inclut la racine de travail (répertoire de travail).
Ca donne :
d:\MonRepertoire\De\Travail\Mon\Chemin\
Moi je voudrais qu'il ne reste que
Mon\Chemin
à partir de l'expression
Mon\Chemin\Fichier.txt-1.0@Projet
Je veux vraiement ici isoler toute la chaine de caractères du début jusqu'au dernier "\".
Y a-t-il une solution ?
Greg.
Il y a un "mais".
Dans la réponse que j'obtiens avec ta solution, il inclut la racine de travail (répertoire de travail).
Ca donne :
d:\MonRepertoire\De\Travail\Mon\Chemin\
Moi je voudrais qu'il ne reste que
Mon\Chemin
à partir de l'expression
Mon\Chemin\Fichier.txt-1.0@Projet
Je veux vraiement ici isoler toute la chaine de caractères du début jusqu'au dernier "\".
Y a-t-il une solution ?
Greg.
Tout d'abord Bonne Année à toi barnabe0057 !
Je pense qu'il faut oublier la notion de chemin.
Plus globalement, j'ai une chaine de caractère :
Mon\Chemin\Fichier.txt-1.0@Projet
Je veux conserver que :
Mon\Chemin
=> c'est à dire du début de la chaine jusqu'au dernier "\".
C'est ça qui est important : du début de la chaine jusqu'au dernier "\".
Comment puis-je faire ?
Je pense qu'il faut oublier la notion de chemin.
Plus globalement, j'ai une chaine de caractère :
Mon\Chemin\Fichier.txt-1.0@Projet
Je veux conserver que :
Mon\Chemin
=> c'est à dire du début de la chaine jusqu'au dernier "\".
C'est ça qui est important : du début de la chaine jusqu'au dernier "\".
Comment puis-je faire ?
Le probleme avec ta solution est qu'elle ajoute systématiquement le chemin du répertoire de travail à la chaine que je lui passe.
Par exemple, lorsque je travaille dans d:\temp et que je passe "\Mon\Chemin\Fichier.txt-1.0@Projet",
je veux obtenir :
"\Mon\Chemin\" ou "Mon\Chemin\" ou "\Mon\Chemin" ou "Mon\Chemin"
mais pas :
"D:\Temp\Mon\Chemin\"
ni
"\Temp\Mon\Chemin\"
Revenons à des traitements de chaine de caractères.
J'ai
"\Mon\Chemin\Fichier.txt-1.0@Projet"
et je veux extraire
"\Mon\Chemin\"
C'est à dire DU DEBUT DE LA CHAINE AU DERNIER "\"
Je pense que comme ça la question plus ciblée.
Comment peut-on faire ça sous MS DOS ?
Par exemple, lorsque je travaille dans d:\temp et que je passe "\Mon\Chemin\Fichier.txt-1.0@Projet",
je veux obtenir :
"\Mon\Chemin\" ou "Mon\Chemin\" ou "\Mon\Chemin" ou "Mon\Chemin"
mais pas :
"D:\Temp\Mon\Chemin\"
ni
"\Temp\Mon\Chemin\"
Revenons à des traitements de chaine de caractères.
J'ai
"\Mon\Chemin\Fichier.txt-1.0@Projet"
et je veux extraire
"\Mon\Chemin\"
C'est à dire DU DEBUT DE LA CHAINE AU DERNIER "\"
Je pense que comme ça la question plus ciblée.
Comment peut-on faire ça sous MS DOS ?
Ainsi soit-il, si tu ne veux passer par la boucle FOR ça reste faisable mais c'est un peu compliqué, voilà tu es prévenu :
Ce code est à améliorer car il ne prévoit pas un scénario (= si la chaine se termine par "\"). Je m'en occuperai quand j'aurai le temps.
Maintenant dodo.
@echo off
setlocal enableextensions enabledelayedexpansion
chcp 1252 >nul
:: -------------------------------------------------------
:: début du programme
:: -------------------------------------------------------
set "chaine=Mon\Chemin\Fichier.txt-1.0@Projet"
echo. & echo ==^>^> %chaine%
set string=%chaine%;
call :count 0
set nb=!compteur!
call :count 1
echo. & echo ==^>^> !ligne!
echo. & pause
exit /b 0
:: -------------------------------------------------------
:: fin du programme
:: -------------------------------------------------------
:: -------------------------------------------------------
:: fonction d'analyse et de récupération de chaine
:: -------------------------------------------------------
:count
set /a compteur=position=0
:boucle
set "car=!string:~%position%,1!"
if "!car!"=="\" (set /a compteur+=1)
set /a position+=1
if %1 EQU 0 (if not "!car!"==";" (goto :boucle))
if %1 EQU 1 (if not "!compteur!"=="!nb!" (set "ligne=!ligne!!car!" & goto :boucle))
goto :eof
Ce code est à améliorer car il ne prévoit pas un scénario (= si la chaine se termine par "\"). Je m'en occuperai quand j'aurai le temps.
Maintenant dodo.