[BATCH] Demande d'explication

Bonjour,

Voilà mon problème :
set new=val_
for %%x in (ex_hii_*.dat) do rename « %%~fx » « %new%%%~nxx »

Cette commande renomme tous les fichiers ex_hii_.dat en val_ex_hii_.dat
Moi je voulais faire ex_val_hii_*.dat

Vous direz que je chipote mais c’est surtout que je ne comprends pas vraiment ce que font
%%x
et
« %%~fx » « %new%%%~nxx »

Si qq pouvait me venir en aide

Merci d’avance
P.S : Google ne m’a pas aidé… :stuck_out_tongue:

Tu devrais utiliser du VBS, ca serait beaucoup plus simple que du faire du Batch à l’ancienne, et c’est présent sur toutes les machines Windows depuis la version 2000.

Et tu connais un bon site qui explique tout ce qu’il faut savoir pour écrire du VBS ?
Moi j’avais choisi le ATCH parce que je connaissais un peu les commandes DOS… mais je suis preneur si il y a mieux :stuck_out_tongue:

Cherches avec Google, ca sera plus simple, la seule chose que je peux te recommander, c’est d’aller sur Msdn, tu trouveras une documentation détaillée de l’objet FileSystemObject qui te permettra d’obtenir la liste des fichiers d’un répertoire puis de les renommer.

MSDN : L’objet FileSystemObject
Introduction à VBScript

Pour quand même le faire avec un batch, il faut faire comme ça:

set new=val_ ren ex_hii_*.dat "ex_%new%hii_*.dat"

Tu n’as pas besoin de faire un for car la présence du caractère joker ‘*’ dans la commande rename (ou ren) lui signifie déjà qu’il doit effectuer le renommage sur tous les fichiers ayant ce format de nom.

En revanche je n’ai aucune idée quand à la signification des ‘~f’ et ‘~n’.

Merci Zoomastigophore pour ton explication

~f et ~n servent à étendre/substituer le nom de fichier dans ta variable; appliquer ~f retournera le chemin complet de ton fichier, ~n juste le nom de fichier (sans extension)

Donc si par exemple, for %%x in (*) do echo %%x renvoie
bar.txt
truc.bat

Alors for %%x in (*) do echo %%~nx donnera
bar
truc

Et for %%x in (*) do echo %%~fx
C:\foo\bar.txt
C:\foo\truc.bat

[quote=“Bleuzaï, post:7, topic: 27271”]~f et ~n servent à étendre/substituer le nom de fichier dans ta variable; appliquer ~f retournera le chemin complet de ton fichier, ~n juste le nom de fichier (sans extension)

Donc si par exemple, for %%x in (*) do echo %%x renvoie
bar.txt
truc.bat

Alors for %%x in (*) do echo %%~nx donnera
bar
truc

Et for %%x in (*) do echo %%~fx
C:\foo\bar.txt
C:\foo\truc.bat[/quote]

Merci pour ces eclaircissements

[quote=“olivarius, post:1, topic: 27271”]Vous direz que je chipote mais c’est surtout que je ne comprends pas vraiment ce que font
%%x[/quote]
D’après l’aide en ligne de win2000 c’est juste une histoire de contexte d’utilisation :

  • dans un fichier batch il faut utiliser : for %%x in (*) do blabla
  • en ligne de commande il faut utiliser : for %x in (*) do blabla