Je voudrais renommer un grand nombre de fichiers dans un dossier sur un système WinXP, en utilisant de préférence un fichier de traitement par lots.
Les fichiers sont actuellement nommés comme ceci:
Vacances2010 001.jpg
Vacances2010 002.jpg
Vacances2010 003.jpg
Et j'aimerais les changer pour:
Décembre 001.jpg
Décembre 002.jpg
Décembre 003.jpg
Comment puis-je effectuer cette opération ??
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET old=Vacation2010
SET new=December
for /f "tokens=*" %%f in ('dir /b *.jpg') do (
SET newname=%%f
SET newname=!newname:%old%=%new%!
move "%%f" "!newname!"
)
Cela crée une boucle sur tous les fichiers .jpg du dossier contenant le fichier de commandes et remplace le Vacation2010 par December dans les noms de fichiers.
dir /b *.jpg >file.bat
Cela vous donnera des lignes telles que:
Vacances2010 001.jpg
Vacances2010 002.jpg
Vacances2010 003.jpg
Editez file.bat dans votre Windows favoriéditeur de texte , en faisant l'équivalent de:
s/Vacation2010(.+)/rename "&" "December \1"/
C'est un regex ; beaucoup d'éditeurs les supportent, mais aucun ne vient par défaut avec Windows (autant que je sache). Vous pouvez également obtenir un outil de ligne de commande tel que sed ou Perl qui peut prendre la syntaxe exacte que j'ai ci-dessus, après un échappement pour la ligne de commande.
Les lignes résultantes ressembleront à ceci:
renommer "Vacation2010 001.jpg" "December 001.jpg"
renommer "Vacation2010 002.jpg" "December 002.jpg"
renommer "Vacation2010 003.jpg" "December 003.jpg"
Vous pouvez reconnaître ces lignes en tant que commandes de changement de nom, une par fichier à partir de la liste d'origine. ;) Exécutez ce fichier de commandes dans cmd.exe.
vous pouvez le faire facilement sans édition manuelle ni utilisation d'éditeurs de texte sophistiqués. Voici un vbscript.
Set objFS = CreateObject("Scripting.FileSystemObject")
strFolder="c:\test"
Set objFolder = objFS.GetFolder(strFolder)
For Each strFile In objFolder.Files
If objFS.GetExtensionName(strFile) = "jpg" Then
strFileName = strFile.Name
If InStr(strFileName,"Vacation2010") > 0 Then
strNewFileName = Replace(strFileName,"Vacation2010","December")
strFile.Name = strNewFileName
End If
End If
Next
enregistrer en tant que myscript.vbs et
C:\test> cscript //nologo myscript.vbs
@ECHO off & SETLOCAL EnableDelayedExpansion
SET "_dir=" REM Must finish with '\'
SET "_ext=jpg"
SET "_toEdit=Vacation2010"
SET "_with=December"
FOR %%f IN ("%_dir%*.%_ext%") DO (
CALL :modifyString "%_toEdit%" "%_with%" "%%~Nf" fileName
RENAME "%%f" "!fileName!%%~Xf"
)
GOTO end
:modifyString what with in toReturn
SET "__in=%~3"
SET "__in=!__in:%~1=%~2!"
IF NOT "%~4" == "" (
SET %~4=%__in%
) ELSE (
ECHO %__in%
)
EXIT /B
:end
Ce script vous permet de modifier le nom de tous les fichiers contenant Vacation2010
portant le même nom, mais avec December
au lieu de Vacation2010
.
Si vous copiez et collez le code, vous devez enregistrer le .bat
dans le même dossier que les photos .. Si vous souhaitez enregistrer le script dans un autre répertoire [E.G. vous avez un dossier favori pour les utilitaires] vous devez changer la valeur de _dir
avec le chemin des photos.
Si vous devez effectuer le même travail pour d'autres photos [ou d'autres fichiers changig _ext
], vous devez modifier la valeur de _toEdit
avec la chaîne que vous souhaitez modifier [ou effacer] et la valeur de _with
avec la chaîne que vous souhaitez placer à la place. de _toEdit
[SET "_with="
si vous voulez simplement effacer la chaîne spécifiée dans _toEdit
].
Vous n'avez pas besoin d'un fichier de commandes, faites ceci à partir de powershell:
powershell -C "gci | % {rni $_.Name ($_.Name -replace 'Vacation2010', 'December')}"