web-dev-qa-db-fra.com

Comment créer un fichier de commandes pour renommer un grand nombre de fichiers d'un dossier?

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 ??

18
user459962
@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.

26
RoXX
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.

10
Roger Pate

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 
6
ghostdog74
@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].

1
ingroxd

Vous n'avez pas besoin d'un fichier de commandes, faites ceci à partir de powershell:

powershell -C "gci | % {rni $_.Name ($_.Name -replace 'Vacation2010', 'December')}"
0
Ani Menon