Batch renommer un fichier en fonction de l'extension

Fermé
chasseur1044 Messages postés 65 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 26 août 2014 - Modifié par chasseur1044 le 19/06/2014 à 15:34
chasseur1044 Messages postés 65 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 26 août 2014 - 22 août 2014 à 11:46
Bonjour,

Je me suis mis sur le batch il y a très peu, et j'ai un problème voir même plusieurs sur un batch servant à renommer une liste de fichier.

//Problème résolu sur ce point là
Premier problème, le batch s'applique à tous les fichiers alors que je voudrai qu'il ne s'applique qu'à mes fichiers pdf...

Pour commencer, voici mon code :

@echo off
setlocal enableDelayedExpansion
for %%F in (*.pdf) do (
:: On supprime l'extension du fichier
ren *.pdf *
:: On ajoute à la fin du nom du fichier le mois et l'année et on remet l'extension.
ren * *_%date:~3,2%%date:~-4%.pdf
)

ça c'est le gros soucis, car dès que je teste le script, ben je renomme mon .bat en même temps qui n'est plus un bat du coup après...
J'ai également essayer avec un if à la place du for :

if (%%F == *.pdf) do (

Mais ça e fonctionne toujours pas...

Ensuite, j'ai un autre petit soucis.

//Problème résolu sur ce point là également
Mon fichier se renomme avec la date, sauf que la date se met après le .pdf...
Je ne comprend pas pourquoi car tout à l'heure ça fonctionnait, mais à force de modifier...

//Problème à RESOUDRE
Et enfin, le dernier problème, j'aimerai en plus d'ajouter une date à la fin, supprimer une partie du nom des fichiers qui se trouve au début. Je précise bien qu'il s'agit de modifier le nom du fichier et non pas l'intérieur d'un fichier texte.
Comment je peux faire ?
Certes, le morceau à supprimer est le même sur chaque fichier mais de préférence j'aimerai avoir une méthode générale.

Merci d'avance pour votre aide.
J'espère avoir été clair :)
A voir également:

6 réponses

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
19 juin 2014 à 15:50
hello
montre un exemple de nom avant et après
1
chasseur1044 Messages postés 65 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 26 août 2014 4
19 juin 2014 à 15:52
Exemple de nom avant :
-Toto-dossier.pdf
Nom du fichier après :
dossier_062014.pdf

Ce qui me manque, c'est la suppression de la partie -Toto-
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
19 juin 2014 à 16:52
essayer
@echo off
setlocal enabledelayedexpansion
set d=%date:~3,2%%date:~6,4%
for %%a in (*.pdf) do (
for /f "tokens=2 delims=-" %%b in ('echo %%a') do (
echo rename %%a %%~nb_%d%%%~xb
)
)
0
chasseur1044 Messages postés 65 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 26 août 2014 4
Modifié par chasseur1044 le 19/06/2014 à 17:06
J'ai essayé merci
ça ne change rien sur mes fichiers
Peux tu m'expliquer rapidement que j'essaye de travailler dessus stp ?

%%~nb => le nom sans l'extension
%d% => la date définie plus haut
%%~xb => ?
%%a => ?

Dernière question, comment ce fait il que quand on lance le script il n'y a pas de confirmation à donner ?
0
chasseur1044 Messages postés 65 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 26 août 2014 4
19 juin 2014 à 17:11
Après modif de la ligne echo :
    rename "%%a" "%%~nb_%d%%%~xb"
ça modifie bien le nom, mais ça supprime l'extension, je passe d'un pdf à un simple fichier
ensuite, je perd une grande partie du nom du fichier (début et fin)
Enfin, ça ne traite qu'un fichier et non tous les fichiers du dossier.
Et une fois un fichier traité ça ne traite pas le suivant si je relance le batch
0
chasseur1044 Messages postés 65 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 26 août 2014 4
19 juin 2014 à 17:16
je viens de comprendre un peu le problème, le token et le delim, j'ai compris la fonction, ça explique pourquoi je perd la fin du nom de mon fichier.

Car le nom de mes fichiers sont de la forme -nnnnn-vvvvv-xxxxxx
donc j'ai 3 -
et ça me supprime donc la chaine n et la chaine x

en revanche l'extension ? ça je devrais pouvoir l'ajouter.
Mais pourquoi un seul fichier est traité ?
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
20 août 2014 à 16:30
utiliser
C:> set n=LeFameuxNomUSDuFichier
C:> echo %n:US=U.S.%
LeFameuxNomU.S.DuFichier
et renommer chaque fichier individuellement
1
chasseur1044 Messages postés 65 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 26 août 2014 4
19 juin 2014 à 15:33
Concernant le problème de l'ajout de la date après le nom du fichier, le problème est résolu :

@echo off
setlocal enableDelayedExpansion
for %%F in (*.pdf) do (
set "name=%%F"
ren "!name!" "!name:.pdf=_%date:~3,2%%date:~-4%.pdf!"
)

De plus ça ne touche pas à mon fichier .bat

Mais si on peut m'expliquer la différence avec le code du dessus, pourquoi dans un cas on ne prend pas en compte l'extension et de deux pourquoi ça s'insère après l'extension initiale je suis preneur.
0
chasseur1044 Messages postés 65 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 26 août 2014 4
20 août 2014 à 16:17
Me revoilà

Bonjour à tous

Bon petit problème

voilà mon code :
setlocal enableDelayedExpansion
for %%F in (*.ppt) do (
set "name=%%F"
if %%F GTR Portfo*US (ren "*US*.ppt" "*U.S.*.ppt")
)

Mon soucis, je veux comme vous pouvez le voir modifier le nom d'un fichier :
LeFameuxNomUSDuFichier
en
LeFameuxNomU.S.DuFichier

Le soucis c'est que quand j'exécute ce script
ça me met bien le US en U.S. mais ça me supprime la suite du nom

Clairement le * ne peut pas être dans la seconde partie du rename.

Alors pour éviter les fausses pistes, j'ai 28 fichier avec la partie en grasse ci dessous qui n'est pas la même à chaque fois :
LeFameuxNomUSDuFichier

Donc je ne peux pas tout simplement ajouter dans le rename la suite du nom et pas envie de me taper 28 lignes de codes en plus pour ça surtout que ce script est amené à être utilisé sur d'autres fichiers.

Voilà.

Merci aux âmes charitables qui pourraient me venir en aide sur ce petit problème.
Merci bien
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chasseur1044 Messages postés 65 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 26 août 2014 4
20 août 2014 à 16:53
individuellement ?

Je ne comprend pas Dubcek.

Si je fais ça ça suit tes consignes ?

setlocal enableDelayedExpansion
for %%F in (*.ppt) do (
set "name=%%F"
if %%F GTR Portfo*US (ren "!name!" "!name:US=U.S.!")
}

ça marche nickel
je ne sais pas pourquoi ne pas faire simple quand on peut...
moi j'essaye de mettre des * des ?...
Il suffit juste de mettre ce qui gêne...
Merci beaucoup

Mais du coup (^^) j'avais dans tout le code plusieurs rename
dont un qui traîte la fin du nom du fichier :

	if %%F GTR Portfo (ren "!name!" "!name:U.S.D.ppt=(USD).ppt!")

à la base c'est USD => (USD)
mais comme on ajoute les points j'ai modifié
seulement ça ne fonctionne plus, les parenthèses ne se mettent pas.
Je dois ajouter une pause ?

Problème résolu juste je sort de la boucle et je le met dans une autre

Merci Dubcek
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
21 août 2014 à 11:03
individuellement ?
Je ne comprend pas Dubcek.

ne pas uiliser de * dans rename
essayer de passer par une variable pluot que mettre "!name:U.S.D.ppt=(USD).ppt!") das le rename
0
chasseur1044 Messages postés 65 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 26 août 2014 4
21 août 2014 à 11:13
Tu veux dire que si je change la variable du nom à chaque fois je peux tout laisser dans la boucle ?
Donc un nouveau set pour chaque changement ?
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
21 août 2014 à 14:45
essayer
0
chasseur1044 Messages postés 65 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 26 août 2014 4
21 août 2014 à 15:21
J'ai essayé par curiosité et ça ne fonctionne pas :)
J'ai essayé de mettre :
name
name1 et name2

Si j'ai bien compris c'est ce que tu me proposais non ?
De changer le nom de variable ?

Mais bon c'est pas gênant le batch fonctionne maintenant.

En revanche petite question par simple curiosité car j'ai contourné le problème (d'ailleurs si j'avais su avant j'aurai gagné 2 jours de tranquillité ^^) :

J'avais cette ligne de code :
ren "!name!" "!name:US=U.S.!"

Mais ça ne respecte pas la casse.
On peut faire en sorte que ça respecte ?
(Je rappel juste que c'est par curiosité, je n'en ai plus besoin dans mon code).
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
22 août 2014 à 09:22
DOS ignore la casse, A ou a c'est le même fichier
C:> dir /b
C:> dir > A
C:> dir > a
C:> dir /b
A
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
21 août 2014 à 08:57
à quoi sert ce test if %%F GTR Portfo puisque %%F est un nom et GTR teste des valeurs numérques ?
0
chasseur1044
21 août 2014 à 09:54
Il me permet de ne traiter que les fichier qui contiennent cette partie dans leur nom. D'après les tests que j'ai fait ça fonctionne.
J'ai lu que ça marchait aussi pour les chaines de caractere.
Apparemment en batch il n'y a pas de ==
Je reteste tout a l'heure et je te confirme
0
chasseur1044 Messages postés 65 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 26 août 2014 4
21 août 2014 à 10:36
Salut
Donc oui c'est bien ça, ça fonctionne aussi sur une string

J'avais vu ça ici (http://www.batcher.fr/fonctions.php) :

Les comparants utilisables sont:

EQU - égal à
NEQ - différent de
LSS - inférieur à
LEQ - inférieur ou égal à
GTR - supérieur à
GEQ - supérieur ou égal à

q Il est possible de comparer des chaînes de caractères ou bien des chiffres.
0