batch : sauvegarder nom de fichier + renomer - Shell/Batch - Programmation
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.
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
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
)
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
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
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.
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 () ?
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
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.
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
Marsh Posté le 03-04-2006 à 14:33:27
et en fouillant bine la commande xcopy /n
elle pourrait pas m'aider en fait ?
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
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
Marsh Posté le 03-04-2006 à 20:57:04
Et comme ça ?
for %%i in (*.wav) do (move "%%~fi" fichiers_renommes\%%~nxsi)
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 :
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 numro de srie du volume est jkfgk-g45f
Rpertoire 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é :
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
le résultat est le suivant :
Le volume dans le lecteur P s'appelle PERSO
Le numro de srie du volume est jkfgk-g45f
Rpertoire 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 Rp(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