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?
@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.
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.
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
@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.
Sie brauchen keine Batch-Datei, tun Sie dies einfach über Powershell:
powershell -C "gci | % {rni $_.Name ($_.Name -replace 'Vacation2010', 'December')}"