
Ich habe ein paar hundert JPGs, die umbenannt werden müssen. Ich muss die folgende einfache Gleichung auf die vorhandene Nummer in jedem Dateinamen anwenden:
(x-290)*-1
Aus „Vitrine Hinge.0.jpg“ würde „Vitrine Hinge.290.jpg“, aus „Vitrine Hinge.1.jpg“ würde „Vitrine Hinge.289.jpg“ und so weiter.
Ich habe Folgendes verwendet:
Dir *.jpg | ` foreach { $data = $_.name.Split(".") Rename-Item -NewName { '(' + $data1+ '-290)(-1)' } }
Und ich erhalte Fehlermeldungen.
Antwort1
Ryans Antwort ist gut, weil sie ohne einen festen Verweis auf den Basisnamen des neuen Dateinamens funktioniert.
Ich benenne Dateien aus dem einen oder anderen Grund ständig um und habe kreative Möglichkeiten gefunden, Zeichenfolgen mithilfe von Powershell zu bearbeiten. Hier ist eine weitere Möglichkeit, dies zu tun:
gci *.jpg | Rename-Item -NewName {$_.basename -replace "$($_.basename.split(".")[-1])$","$(290-$_.basename.split(".")[-1])$($_.extension)"}
Dieser Einzeiler kann wiederverwendet werden, um andere Dateien auf die gleiche Weise umzubenennen, egal ob es sich um JPG-, GIF- oder TXT-Dateien handelt. Einzige Voraussetzung ist, dass der letzte Teil des Basisnamens mit ".#" endet.
Was ist hier also los? Um es aufzuschlüsseln, nehmen wir an, $_ ist derzeit ein [System.IO.FileInfo]-Objekt für die Datei „Vitrine Hinge.12.jpg“. Daher:
$_.basisname
würde gleich [Zeichenfolge] „Vitrine Hinge.12“ sein
$_.basename.split(".")
würde zu einem Array mit den folgenden Einträgen führen:
Door Hinge
12
In diesem Fall würde sich [1] auf die „12“ beziehen. Beachten Sie jedoch, dass ich stattdessen Folgendes verwendet habe:
$_.basename.split(".")[-1]
Dies liegt daran, dass ich bei einer Datei mit dem Namen „Viterine Hinge.Chrome.12.jpg“ auf „Chrome“ verwiesen hätte. Die Verwendung von [-1] gibt mir das letzte Element im Array und daher wäre es egal, wenn meine Datei andere Punkte im Namen hätte.
OK, also kapsele ich das jetzt an dieser Stelle in $() und verwende es in meinem -replace-Operator. Beachten Sie, dass ich das erste Argument mit $ beende, damit ich am Ende der Zeichenfolge einen regulären Ausdruck finden würde. Auf diese Weise wäre es egal, wenn meine Dateien andere Zahlen im Namen hätten. Beispielsweise würde „Viterine D00r Knob.0.jpg“nichtwird umbenannt in „Viterine D290290r Knob.290.jpg“
Sagen Sie mir Bescheid, wenn Sie etwas übersehen haben. Prost :)
Antwort2
So etwas sollte funktionieren.
Get-ChildItem *.Jpg|%{$SplitName=$_.name -split '\.';$NewNumber= $(([int]$SplitName[1]-290)*-1);$NewName=@($SplitName[0],$NewNumber, $SplitName[2]) -join '.'; Rename-Item $_.name $Newname}
Es wäre ausgebrochen.
$Files=Get-ChildItem *.jpg
Foreach ($File in $files){
$SplitName=$File.name -split '\.';
$NewNumber= $(([int]$SplitName[1]-290)*-1)
$NewName=@($SplitName[0],$NewNumber, $SplitName[2]) -join '.'
Rename-Item $_.name $Newname
}