Mémoriser partie d'un nom de fichier après dir

Mémoriser partie d'un nom de fichier après dir - Shell/Batch - Programmation

Marsh Posté le 11-03-2006 à 21:39:48    

Bonjour à tous,
 
j'ai posé cette question sur plusieurs forums, sans obtenir de réponses concrètes...
voilà le problème :
 
en premier lieu, il faut vérifier (avec dir /s) qu'il existe un fichier dont le nom se décompose ainsi : nomdefichieraaa.dat
la partie "nomdefichier" est variable, le nom peut etre différent.
la partie aaa.dat est constante.
 
On sait de plus que s'il existe un tel fichier nomdefichieraaa.dat, alors il existe 3 autres fichiers qui seront nommés ainsi nomdefichier* (peu importe ce que vaut *, ce qu'il faut juste retenir, c'est que ces 3 fichiers auront forcément un nom qui commence par "nomdefichier"
 
Bien, mais la question maintenant, c'est comment lister tous ces fichiers en un seul coup ?
 
J'explique : par la commande dir *aaa.dat -> 2 possibilités
- si rien n'est trouvé, pas de souci, le problème est réglé (if not exist *aaa.dat echo il n'y a pas ce fichier grossomodo)
- si nomdefichieraaa.dat existe, alors lister tous les fichiers dont le nom commence par nomdefichier avec une commande dir par exemple (d'après les données, il devrait en lister 4)
 
je pense qu'il faut stocker quelque part la partie "nomdefichier" pour pouvoir la rechercher. Une difficulté supplémentaire est que ces fichiers dont le nom commence par nomdefichier peuvent se situer dans des répertoires différents.
 
En espérant que la formulation du problème soit claire, merci pour votre aide.
 

Reply

Marsh Posté le 11-03-2006 à 21:39:48   

Reply

Marsh Posté le 11-03-2006 à 22:57:33    

Je présume que tu sois sous XP.
 
Regarde l'aide de la commande set :
set VAR=%VAR:~x,y%
et ses variants, ainsi que celle de for pour %~nf et cie.

Reply

Marsh Posté le 12-03-2006 à 13:04:48    

bonjour nglechau et merci
 
en effet je suis sous xp...
 
pas évident. J'ai juste fait ce test pour le moment  
set var="*"aaa.dat
dir %var%
évidemment il ne trouve qu'un seul fichier, celui qui permet juste de déterminer si ces 4 fichiers existent. Tu aurais plus de précisions sur  
VAR=%VAR:~x,y%  
est-ce que x correspond à la première partie du nom de fichier et y à la deuxième ?
quelques essais avec cette commande n'ont rien donné...

Reply

Marsh Posté le 12-03-2006 à 13:23:30    

Tu tapes  
set /?
à l'invite de commandes pour l'aide sur la syntaxe et les exemples (ces derniers sont donnés pour PATH mais pareil pour n'importe quelle variable).

Reply

Marsh Posté le 12-03-2006 à 13:52:41    

en fait on pourrait faire comme ceci également (à moins que ce ne soit la piste que tu suggères, désolé je suis débutant)
 
vu que l'expression aaa.dat de nomdefichieraaa.dat est constante et si n est le nombre de caractères du nom du fichier, il faudrait qu'il extrait les (n-7) premiers caractères (aaa.dat = 7 caractères en incluant le point) en partant de la droite. apparemment avec %VAR:~x,-7% ça a l'air possible (?)
 
j'essaye de regarder de ce côté

Reply

Marsh Posté le 12-03-2006 à 14:21:43    

Voilà, c'est exactement dans cette direction que je t'aiguillais ;)

Reply

Marsh Posté le 12-03-2006 à 14:24:11    

je suis sur que c'est pas loin...
 

Citation :

set var=*aaa.dat
dir %var% -> il trouve le fichier
set %var:~0,-7%


 
-> la variable d'environnement * n'est pas définie
 
c'est logique mais je ne comprends pas comment enregistrer cette parie "nomdefichier" autrement, c'est bien la partie qui se trouve avant aaa.dat et elle est inconnue
 

Reply

Marsh Posté le 12-03-2006 à 18:36:52    

Tu n'as pas regardé l'aide de for comme j'avais suggéré ?
 
Tu dois lister les fichiers autrement que par dir /s puis utiliser les substitutions pour récupérer les éléments nécessaires pour différentes opérations, le nom du fichier sans ou avec extension dans ce cas précis.

Reply

Marsh Posté le 14-03-2006 à 22:19:03    

bonsoir,nglechau
 
j'ai vraiment du mal à combiner les deux commandes... au mieux il trouve juste le fichier qui identifie la présence de *aaa.dat, bref ça n'avance pas. J'ai bien regardé l'aide mais ça coince.
Et je ne sais pas comment lister les fichiers autrement qu'avec dir, à moins d'envoyer le fichier dans un fichier de sortie, puis faire lire ce fichier de sortie en utilisant éventuellement set %var:~0,-7%
 
je nage ; je te remercie de m'avoir aiguillé, mais tu n'aurais pas une approche plus concrète, stp ?

Reply

Marsh Posté le 14-03-2006 à 22:54:27    

Regarde dans l'aide de
for
notamment  
for /r
 
et la fin sur les substitutions.
 
Exemple :

Code :
  1. echo Liste de tous les fichiers txt du dossier C:\mon_dossier
  2. for /r C:\mon_dossier %%f in (*.txt) do (
  3.   echo %%f
  4. )

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed