batch : sauvegarder nom de fichier + renomer

batch : sauvegarder nom de fichier + renomer - Shell/Batch - Programmation

Marsh Posté le 29-03-2006 à 09:50:54    

bonjour, je suis un petit newbie sur harware.fr :)  
 
Dans le cadre d'un stage, je dois réaliser deux fichiers batch pour conserver les noms de fichiers d'un dossier dans un *.txt puis les renommer en 8 caracteres sans les caracteres speciaux.
 
En ce qui concerne le 1er fichier, qui permet de récuperer les noms de fichier, j'ai commencé par cela :
 

Code :
  1. dir *.wav /w /l >> cd.rtf


 
donc ici, j'arrive a récuperer mes noms de fichiers, les mettres en minuscules, mais il y a des lignes qui genent a la lisibilité :  
 
 Le volume dans le lecteur D s'appelle SOURCES
 Le num‚ro de s‚rie du volume est jkfgk-g45f
 
 R‚pertoire de d:\Documents and Settings\
 
et de plus les noms de fichiers inscrits dans le fichier *.txt ont des problèmes de é à è etc...(exemple :
02 - y'a t'il des ‚ … Š dans l'‚curie.wav
 
jai essayé par la suite de faire une boucle for, mais je ne suis pas trés doué :
 

Code :
  1. dir *.wav /w /l >> cd.rtf
  2. for /f "tokens=1,2* delims= -> - %%a in (c:cd.rtf) do (echo %%a %%b) >>log.txt


mais rien ne se passe
 
 
Pour le second fichier, il faut donc convertir les noms des fichiers en nom plus court :
ex :03 - toujous est-il.wav = 03-TOU~1.wav
 
donc, jai fait 3 lignes :)  

Code :
  1. dir /w /l /x >>test2txt


 
 
le résultat est le suivant :  
 Le volume dans le lecteur P s'appelle PERSO
 Le num‚ro de s‚rie du volume est jkfgk-g45f
 
 R‚pertoire de P:\test
 
29/03/2006  09:47    <REP>                       .
29/03/2006  09:47    <REP>                       ..
28/03/2006  16:03                 0 01-lav~1.wav 01 - la vie d'un eleveur de trotteurs.wav
28/03/2006  16:03                 0 02-y'a~1.wav 02 - y'a t'il des ‚ … Š dans l'‚curie.wav
28/03/2006  16:03                 0 03-tou~1.wav 03 - toujous est-il.wav
29/03/2006  09:19             1 463              cd.rtf
29/03/2006  09:41               110 recupe~1.bat recuperer_nom_fichier.bat
28/03/2006  16:48                 0 renomm~1.bat renommer_fichier.bat
28/03/2006  17:19                69              test.txt
29/03/2006  09:43               913              test2.rtf
29/03/2006  09:47                46              test3.txt
               9 fichier(s)            2 601 octets
               2 R‚p(s)   8 523 976 704 octets libres
 
 
comment réussir a récuperer ces noms de fichier : (01-lav~1.wav) et renommer le fichier trop long ainsi ???
 
 
merci d'avance

Reply

Marsh Posté le 29-03-2006 à 09:50:54   

Reply

Marsh Posté le 29-03-2006 à 19:33:05    

Fais  
for /?  
à la l'invite de commandes pour comprendre les boucles.  
 
Notamment les substitutions  
%~nf  
%~xf  
%~sf  
etc.  
 
Ca te permet de parcourir un dossier et de récupérer les noms courts de ses fichiers afin d'effectuer le renommage.

Reply

Marsh Posté le 30-03-2006 à 11:37:37    

merci bien, jai essayé de voir comment se servir des substitutions mais je ne comprend pas
 
jai pourtant réussi a avancer :  
 
 
dir *.wav /w >>temp.txt
FOR /F "skip=5 eol=; tokens=1,2* delims=." %%i in (temp.txt) do @echo %%i >>maquette_jaquette_cd.rtf
del temp.txt
 
 
resultat :  
03 - toujours est-il que ㌢ marche pas !!!
03 - toujours est-il  
               2 fichier(s)                0 octets  
               0 RQ(s)   7 991 095 296 octets libres  
 
si je l'ouvre en mode ms dos, pas de probleme de caracteres...
 
jai cru comprendre que tu avais réalisé un petit programme pour éviter ce genre d'erreur...
 
et sinon,  comment supprimer les 2 dernieres lignes ?
jai bien compris la comamnde skip, existe il une commande pour la fin du fichier ?
 
 
allez, je m'attelle serieusement au 2eme script.
 
merci encore

Reply

Marsh Posté le 30-03-2006 à 13:52:40    

Non, n'utilise pas du tout
dir
 
Passe directement à for.
 
Un exemple simple pour commencer :
for %%f in (*.*) do (
  echo %%~ff
  echo %%~xf
)

Reply

Marsh Posté le 30-03-2006 à 15:03:22    

c'est tout de suite plus simple :)
 
echo off
 
for %%f in (*.wav) do (@echo %%~nf) >> jaquette.rtf
 
je continue sur le 2eme programme
 
echo off
 
for %%I in (*.wav) do (@echo %%~sI)
 
ça me donne :
 
P:\test\NOUVEA~1\BON_TO~1\01-LES~1.WAV
P:\test\NOUVEA~1\BON_TO~1\03-UNJ~1.WAV
 
 
il faut que j'arrive a placer le syteme de tokens que javais réalisé avant :  
FOR /F "skip=7 eol=; tokens=1,2*" %%i in (temp.txt) do @echo %%i %%j %%k
 
mais je n'y arrive pas
 
et aprés il faudra réussir a renommer le fichier avec le dernier "token"...
 
help :)


Message édité par grumote le 30-03-2006 à 15:12:16
Reply

Marsh Posté le 30-03-2006 à 16:00:53    

bon, javance :
 
echo off
 
 
for %%f in (*.wav) do (@echo %%~nf) >> jaquette.rtf
 
 
->> ça me crée un fichier rtf avec les noms des fichiers wav (sans le .wav)
 
for /F "eol=; tokens=1,3-6* delims= " %%I in (jaquette.rtf) do (@echo %%~sI-%%J_%%K_%%L_%%M.wav) >> renommage.txt
 
ça me crée un fichier *.rtf contenant le chemin + le noms de fichiers en format cours
 
j'aimerai récuperer que le format cours (donc ça va etre a base de tokens et ensuite, renomemr les fichiers par rapport au noms présent dans le *.rtf
 
jvais y arriver :)
 

Reply

Marsh Posté le 30-03-2006 à 19:35:33    

Oui, sûr, tu vas y arriver ;)
 
N'oublie pas de faire  
for /?
et regarde la fin de l'aide. Il y a d'autres choses intéressantes ;)
 
Tu peux ainsi combiner les substitutions, comme :
%~nxf
 
Pour le renommage, place-toi dans le dossier concerné et %~sf te donne le nom court du fichier.
 
La commande de renommage sera par exemple :
ren "%~ff" %~sf
 
Tu n'as pas besoin de réutiliser le fichier jaquette.rtf et donc pas besoin des tokens.

Reply

Marsh Posté le 03-04-2006 à 09:50:27    

mais comment aussi ?
je n'arrive vraiment pas a renomer par lot :  
 
for /F "eol=; tokens=1* delims=\" %%I in (*.wav) do (rename %%sf)
 
mais évidemment ça ne marche pas...
 
donc je prefere essayer comme ça :
 
for %%i in (*.wav) do (@echo rename %%~fi %%~si)
 
alors là ça a l'air de marcher mais en fait... non
la ligne de commande me donne de bon resultat :  
 
P:\test\Nouveau dossier\BON_TOUCHEPLUS>()  
rename P:\test\Nouveau dossier\BON_TOUCHEPLUS\01 - les ‚talons du haras.wav P:\test\NOUVEA~1\BON_TO~1\01-LES~1.WAV
 
mais ça marche pas, ptte a cause du () ?

Reply

Marsh Posté le 03-04-2006 à 11:46:58    

jdois etre pas trés doué...
mais jai beau relire je ne vois pas ce que je fais de travers, surement un truc tout bête...
 
 
for %%f in (*.wav) do (@echo ren "%%~ff" %%~sf)
 
for %%f in (*.wav) do @echo ren %%~ff %%~sf
 
ça revient au même
je vois pas ou peut etre ma faute de syntaxe...
ptet parce qu'il faut récuperer le chemin d'accés en entier donc : %%~fsI
mais ça fait pareil ça marche paaaaaaas :'(
 
jsuis paumé la
je sens quon est pas loin mais zut...
 
couraaaage

Reply

Marsh Posté le 03-04-2006 à 11:54:44    

- N'oublie pas les guillemets quand le chemin contient des spaces --> la deuxième commande est erronée  
- tu vas avoir besoin d'un dossier pour stocker temporairement les fichiers renommés, sinon : erreur Accès refusé puisque écrasement d'un fichier par lui-même.  
- ren accepte uniquement le nouveau nom du fichier (et son extension) comme deuxième paramètre, pas un chemin.

Reply

Marsh Posté le 03-04-2006 à 11:54:44   

Reply

Marsh Posté le 03-04-2006 à 14:16:44    

donc on tombe sur un probleme que je n'arrive pas a résoudre, comment récuperer uniquement le nom de fichier court, et non pas son extension ?
 
%~fsI       - ‚tend %I en nom de chemin complet avec noms courts
                   uniquement
mais ça ça marche meme pas
donc en théorie
%~ps ou sp, devrait me donner le nom de fichier court mais meme pas...
 
je sais que je suis pas loin mais la jsuis perdu

Reply

Marsh Posté le 03-04-2006 à 14:33:27    

et en fouillant bine la commande xcopy /n
elle pourrait pas m'aider en fait ?

Reply

Marsh Posté le 03-04-2006 à 14:46:11    

okay, c'est le echo qui m'embétait !
for %%i in (*.wav) do ren "%%~fi" %%~nsi
 
le probleme c'es que la maintenant faut juste transferer le nom de chemin court, c'est pas possible avec seulement les attributs de for ??
je trouve pas la

Reply

Marsh Posté le 03-04-2006 à 15:18:58    

bon bah tant pis, faut bine que je le fnisse ce boulot
 
mkdir fichiers_renommes
xcopy /n *.wav .\fichiers_renommes\
 
del *.wav
 
jsuis passé par ça... résultat jai des fichiers en 8 caracteres dans un dossier temp
le robleme c que qunad jai essayé de les rebalancer a la racin,e il redevienne avec des noms de fichiers longs...
 
bizarre

Reply

Marsh Posté le 03-04-2006 à 20:57:04    

Et comme ça ?
for %%i in (*.wav) do (move "%%~fi" fichiers_renommes\%%~nxsi)

Reply

Marsh Posté le 04-04-2006 à 10:14:39    

yeah :)
bon bah merci pour tout nglechau !

Reply

Sujets relatifs:

Leave a Replay

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