Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1512 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  batch : sauvegarder nom de fichier + renomer

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

batch : sauvegarder nom de fichier + renomer

n°1334373
grumote
Posté le 29-03-2006 à 09:50:54  profilanswer
 

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

mood
Publicité
Posté le 29-03-2006 à 09:50:54  profilanswer
 

n°1334867
wackevat
Posté le 29-03-2006 à 19:33:05  profilanswer
 

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.

n°1335413
grumote
Posté le 30-03-2006 à 11:37:37  profilanswer
 

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

n°1335509
wackevat
Posté le 30-03-2006 à 13:52:40  profilanswer
 

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

n°1335570
grumote
Posté le 30-03-2006 à 15:03:22  profilanswer
 

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
n°1335638
grumote
Posté le 30-03-2006 à 16:00:53  profilanswer
 

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 :)
 

n°1335797
wackevat
Posté le 30-03-2006 à 19:35:33  profilanswer
 

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.

n°1337576
grumote
Posté le 03-04-2006 à 09:50:27  profilanswer
 

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 () ?

n°1337654
grumote
Posté le 03-04-2006 à 11:46:58  profilanswer
 

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

n°1337664
wackevat
Posté le 03-04-2006 à 11:54:44  profilanswer
 

- 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.

mood
Publicité
Posté le 03-04-2006 à 11:54:44  profilanswer
 

n°1337750
grumote
Posté le 03-04-2006 à 14:16:44  profilanswer
 

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

n°1337768
grumote
Posté le 03-04-2006 à 14:33:27  profilanswer
 

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

n°1337779
grumote
Posté le 03-04-2006 à 14:46:11  profilanswer
 

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

n°1337814
grumote
Posté le 03-04-2006 à 15:18:58  profilanswer
 

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

n°1338195
wackevat
Posté le 03-04-2006 à 20:57:04  profilanswer
 

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

n°1338428
grumote
Posté le 04-04-2006 à 10:14:39  profilanswer
 

yeah :)
bon bah merci pour tout nglechau !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  batch : sauvegarder nom de fichier + renomer

 

Sujets relatifs
[Résolu] lire un morceau de fichier audio avec JMF[Résolu] Ecrire un fichier au format UTF-8
[Résolu] [Batch] [Newbies] Diverses questions au sujet du BatchProblème de ponctuation ds un fichier texte dynamique ds flash
recuperer chemin fichierchemin fichier
[résolu] fichier quitter en cliquant sur un boutonDOM, extraction d'information dans un fichier XML
Ouverture d'un fichier Excel avec un XML et lancement d'une macroPHP + RTF : sauvegarder le RTF
Plus de sujets relatifs à : batch : sauvegarder nom de fichier + renomer


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR