Massenumbenennung von Dateien in PowerShell mit sequenziellen numerischen Suffixen

8

Ich habe auf dieser Seite mehrere Antworten zum Umbenennen von Dateien in Powershell gefunden. Tut mir leid, wenn dies eine Wiederholung ist. Ich habe gut 5 Stunden auf Google und verschiedenen Websites verbracht, um das herauszufinden. Ich habe wirklich versucht, das gut zu erklären. Ich bin kein Programmierer, sondern jemand, der sich sorgfältig mit ihrer Einreichung beschäftigt.

Ich habe 14.000 Bilder nach Jahr und Monat in Dateien sortiert, aber mit mehreren Kameras aufgenommen und möchte, dass der Dateiname das Aufnahmedatum widerspiegelt. Zum Beispiel 16. Oktober 1998 Bilder sind in einem Ordner namens 1998 \ 10 Oktober \ 19981016 . Ich möchte, dass alle Bilder benannt werden 19981016_0001 19981016_0002 usw. Ich habe mehrere Vorschläge ausprobiert, aber es hat nicht funktioniert. Wahrscheinlich aufgrund meines Mangels an Programmiererwissen haha. Könnte mir jemand helfen und mir eine Attrappe geben? Ich kann zu dem Punkt kommen, wo es den Ordner auflistet, den ich ändern möchte, aber ich kann es nicht wirklich ändern. Alle meine Bilder sind .jpg. Ich habe versucht, einen Screenshot von dem, was ich gemacht habe, anzuhängen, aber leider kann ich nicht, da ich hier zu neu bin. Vielen Dank im Voraus!

Ich habe eine temporäre Datei mit Kopien erstellt, falls ich es vermasselt habe. Ich begann mit der Eingabe von cd "C:\Documents and Settings\Brooke LastName\Desktop\Temp" . Nachdem ich meine Datei erfolgreich geladen hatte, verwendete ich eine Formel, die ich in diesem Forum gefunden hatte.

%Vor%

Der Fehler, den ich gesagt habe

%Vor%

Der Fehler wurde mehrmals wiederholt.

Ich habe mehrere Formeln im Web gefunden, aber die meisten erstellten Dateien, die in Klammern stehen würden, zum Beispiel ferien (1) .jpg . Ich möchte einen vierstelligen Zähler nach einem Unterstrich am Ende meines Datums, z. 19981016_0001

    
Brooke 18.08.2013, 21:53
quelle

1 Antwort

24

Die Syntax ist weit weg. Ein paar Probleme:

  • Ich bin nicht sicher, was $($.19981016) eigentlich erzeugen sollte, aber $ () wertet den Ausdruck in den Klammern aus und interpoliert das Ergebnis in die Zeichenfolge, und Sie erhalten den Fehler, weil $.19981016 ist kein gültiger Ausdruck. Der Fehler würde für jede JPG-Datei im Verzeichnis wiederholt.
  • {0:00000000#} in einer formatierten Zeichenfolge erstellt eine Null-aufgefüllte Zahl von 9 Ziffern, aber eine kürzere Möglichkeit ist {0:D9} . Ich dachte jedoch, Sie möchten, dass die Null-aufgefüllte Zahl 4 Ziffern hat, also sollte das {0:0000#} oder {0:D4} sein.
  • Ich bin mir nicht sicher, was Foreach {$i=1} { [...] tun soll. Das Schlüsselwort foreach kann eine foreach -Schleife bedeuten oder eine Abkürzung für Foreach-Object . In diesem Kontext ist das Empfangen von Eingaben von einer Pipeline notwendigerweise Letzteres, aber diese Syntax ist in beiden Richtungen falsch.

Dies wird tun, was Sie wollen, wenn ich die Beschreibung richtig verstehe:

%Vor%

Die Dateinamen sind 19981016_0001.jpg , 19981016_0002.jpg , 19981016_0003.jpg , usw.

Einige Anmerkungen:

  • Sie haben gesagt, dass Sie Dateinamen wie 19981016_0001 möchten, aber ich nehme an, dass Sie die Erweiterung .jpg beibehalten möchten.
  • Sie müssen $ i initialisieren, andernfalls beginnt es bei 0, wenn es noch nicht definiert ist, oder schlimmer noch bei einer anderen Zahl, wenn $ i zuvor verwendet wurde in derselben PowerShell-Sitzung. Wenn Sie zum Beispiel 1.432 .jpg-Dateien im Verzeichnis haben und den Befehl zuerst mit -WhatIf ausführen und dann für real ausführen, beginnen die Zahlen mit 1432.
  • $ i ++ erhöht $ i um 1. Wenn Sie es jedoch als Wert verwenden, erhöht es , nachdem der Wert gelesen wurde. Wenn $ i nicht definiert ist, beginnt es daher bei 0.
  • Get-ChildItem ist dasselbe wie ls . Ich habe den nativen PowerShell-Namen verwendet, aber sie sind austauschbar ( ls , dir und gci sind Aliase für Get-ChildItem ).
  • % {} ist eine Abkürzung für Foreach-Object
Adi Inbar 19.08.2013, 03:07
quelle

Tags und Links