Comment pourrais-je écrire un fichier batch ou cmd qui renommera tous les fichiers d'un répertoire? J'utilise Windows.
Change ça:
750_MOT_Forgiving_120x90.jpg
751_MOT_Persecution_1_120x90.jpg
752_MOT_Persecution_2_120x90.jpg
753_MOT_Hatred_120x90.jpg
754_MOT_Suffering_120x90.jpg
755_MOT_Freedom_of_Religion_120x90.jpg
756_MOT_Layla_Testimony_1_120x90.jpg
757_MOT_Layla_Testimony_2_120x90.jpg
Pour ça:
750_MOT_Forgiving_67x100.jpg
751_MOT_Persecution_1_67x100.jpg
752_MOT_Persecution_2_67x100.jpg
753_MOT_Hatred_67x100.jpg
754_MOT_Suffering_67x100.jpg
755_MOT_Freedom_of_Religion_67x100.jpg
756_MOT_Layla_Testimony_1_67x100.jpg
757_MOT_Layla_Testimony_2_67x100.jpg
Une instruction FOR pour parcourir les noms (tapez FOR /?
pour obtenir de l'aide), et rechercher et remplacer une chaîne (tapez SET /?
pour aider).
@echo off
setlocal enableDelayedExpansion
for %%F in (*120x90.jpg) do (
set "name=%%F"
ren "!name!" "!name:120x90=67x100!"
)
MISE À JOUR - 2012-11-07
J'ai cherché à savoir comment la commande RENAME traite les caractères génériques: Comment la commande Windows RENAME interprète-t-elle les caractères génériques?
Il s'avère que ce problème particulier peut être résolu très facilement en utilisant la commande RENAME sans avoir besoin d'un script batch.
ren *_120x90.jpg *_67x100.*
Le nombre de caractères après le _
n'a pas d'importance. Le renommage fonctionnerait toujours correctement si 120x90
est devenu x
ou xxxxxxxxxx
. L'aspect important de ce problème est que le texte entier entre le dernier _
et le .
est remplacé.
À partir de Windows 7, vous pouvez le faire dans une seule ligne de PowerShell.
powershell -C "gci | % {rni $_.Name ($_.Name -replace '120x90', '67x100')}"
powershell -C "..."
lance une session PowerShell pour exécuter la commande citée. Il revient au shell externe une fois la commande terminée. -C
est l'abréviation de -Command
.
gci
renvoie tous les fichiers du répertoire courant. C'est un alias pour Get-ChildItem
.
| % {...}
crée un pipeline pour traiter chaque fichier. %
est un alias pour Foreach-Object
.
$_.Name
est le nom du fichier en cours dans le pipeline.
($_.Name -replace '120x90', '67x100')
utilise le -replace
opérateur pour créer le nouveau nom de fichier. Chaque occurrence de la première sous-chaîne est remplacée par la deuxième sous-chaîne.
rni
change le nom de chaque fichier. Le premier paramètre (appelé -Path
) identifie le fichier. Le deuxième paramètre (appelé -NewName
) spécifie le nouveau nom. rni
est un alias pour Rename-Item .
$ dir
Volume in drive C has no label.
Volume Serial Number is A817-E7CA
Directory of C:\fakedir\test
11/09/2013 16:57 <DIR> .
11/09/2013 16:57 <DIR> ..
11/09/2013 16:56 0 750_MOT_Forgiving_120x90.jpg
11/09/2013 16:57 0 751_MOT_Persecution_1_120x90.jpg
11/09/2013 16:57 0 752_MOT_Persecution_2_120x90.jpg
3 File(s) 0 bytes
2 Dir(s) 243,816,271,872 bytes free
$ powershell -C "gci | % {rni $_.Name ($_.Name -replace '120x90', '67x100')}"
$ dir
Volume in drive C has no label.
Volume Serial Number is A817-E7CA
Directory of C:\fakedir\test
11/09/2013 16:57 <DIR> .
11/09/2013 16:57 <DIR> ..
11/09/2013 16:56 0 750_MOT_Forgiving_67x100.jpg
11/09/2013 16:57 0 751_MOT_Persecution_1_67x100.jpg
11/09/2013 16:57 0 752_MOT_Persecution_2_67x100.jpg
3 File(s) 0 bytes
2 Dir(s) 243,816,271,872 bytes free