it-swarm.com.de

Wie erstelle ich eine Batchdatei, um eine große Anzahl von Dateien in einem Ordner umzubenennen?

Ich möchte eine große Anzahl von Dateien in einem Ordner auf einem WinXP-System umbenennen, vorzugsweise mit einer Batch-Datei.

Die Dateien heißen derzeit so:

Vacation2010 001.jpg
Vacation2010 002.jpg
Vacation2010 003.jpg

Und ich möchte sie ändern in:

Dezember 001.jpg
Dezember 002.jpg
Dezember 003.jpg

Wie kann ich diesen Vorgang durchführen?

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!"
)

Dies führt zu einer Schleife über alle JPG-Dateien in dem Ordner, in dem sich die Batchdatei befindet, und ersetzt Vacation2010 durch Dezember in den Dateinamen.

26
RoXX
dir /b *.jpg >file.bat

Dadurch erhalten Sie folgende Zeilen:

Vacation2010 001.jpg
Vacation2010 002.jpg
Vacation2010 003.jpg

Bearbeiten Sie file.bat in Ihrem Favoriten WindowsTexteditor und machen Sie das Äquivalent zu:

s/Vacation2010(.+)/rename "&" "December \1"/

Das ist ein Regex ; Viele Editoren unterstützen sie, aber keine, die standardmäßig mit Windows geliefert werden (soweit ich weiß). Sie können auch ein Befehlszeilentool wie sed oder Perl erhalten, das die gleiche Syntax wie oben verwendet hat, nachdem Sie für die Befehlszeile ein Escaping durchgeführt haben.

Die sich ergebenden Zeilen werden wie folgt aussehen:

umbenennen in "Vacation2010 001.jpg" "Dezember 001.jpg"
Umbenennen in "Vacation2010 002.jpg" "Dezember 002.jpg"
Umbenennen in "Vacation2010 003.jpg" "Dezember 003.jpg"

Sie können diese Zeilen als Umbenennungsbefehle erkennen, einen pro Datei aus der ursprünglichen Liste. ;) Führen Sie diese Batchdatei in cmd.exe aus.

10
Roger Pate

sie können dies ganz einfach ohne manuelle Bearbeitung oder Verwendung ausgefallener Texteditoren tun. Hier ist ein 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 

speichern Sie als myscript.vbs und 

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

Mit diesem Skript können Sie den Namen aller Dateien ändern, die Vacation2010 mit demselben Namen enthalten, jedoch mit December anstelle von Vacation2010.

Wenn Sie den Code kopieren und einfügen, müssen Sie den .bat im selben Ordner der Fotos speichern. Wenn Sie das Skript in einem anderen Verzeichnis speichern möchten [E.G. Sie haben einen Favoritenordner für die Dienstprogramme.] Sie müssen den Wert von _dir mit dem Pfad der Fotos ändern.

Wenn Sie dieselbe Arbeit für andere Fotos [oder andere Dateien, die _ext] ändern, ausführen müssen, müssen Sie den Wert von _toEdit mit der Zeichenfolge ändern, die Sie ändern [oder löschen] und den Wert von _with mit der Zeichenfolge, die Sie stattdessen einfügen möchten von _toEdit [SET "_with=", wenn Sie einfach die in _toEdit angegebene Zeichenfolge löschen möchten.

1
ingroxd

Sie brauchen keine Batch-Datei, tun Sie dies einfach über Powershell:

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