Gibt es eine Möglichkeit, Dateien stapelweise umzubenennen, indem der Dateiname basierend auf der Großschreibung neu verschoben wird?

1

Ich möchte eine große Anzahl von Dateien im folgenden Format umbenennen:

Firstname LASTNAME ABC to yyyymmdd.pdf

Wobei ABC ein zufälliges Akronym ist und JJJJMTT das Datum ist, um:

LASTNAME Firstname ABC to yyyymmdd.pdf

Es befindet sich auf einem Computer, auf dem keine Software von Drittanbietern installiert ist. Daher kommen hübsche Tools wie das Dienstprogramm für die Massenumbenennung nicht in Frage. Ich überlege, eine Batch-Datei zu erstellen, weiß aber nicht, wo ich anfangen soll. Ich habe hier und auf anderen Websites eine Reihe anderer Fragen gefunden, die lediglich beschreiben, wie die Groß- / Kleinschreibung geändert werden kann, aber das möchte ich nicht. Der nächste Punkt ist, dass ich weiß, dass ich FINDSTR verwenden muss, aber ich habe nicht genug Erfahrung mit Befehlszeilenskripten, um fortzufahren.

lolsail
quelle

Antworten:

0

Okay, ich habe es herausgefunden. Hier und an anderen Stellen eine funktionierende Batch-Datei aus etwa zehn weiteren Beispielen zusammengestellt:

@echo off
setlocal EnableDelayedExpansion

for /F "delims=" %%f in ('dir /A-D /B *.pdf') do (
   for /F "tokens=1-5 delims= " %%a in ("%%~Nf") do (
      ECHO ren "%%f" "%%b %%a %%c %%d %%e!%%~Xf"
      ren "%%f" "%%b %%a %%c %%d %%e!%%~Xf"
   )
)
lolsail
quelle
0

Ihre Antwort kann erheblich vereinfacht werden: -

for /F "tokens=1-2*" %%f in ('dir /A-D /B *.pdf') do (
    ECHO ren "%%f %%g %%h" "%%g %%f %%h"
    ren "%%f %%g %%h" "%%g %%f %%h"
)

Dies funktioniert, weil:

  • "tokens=1-2*"teilt den Dateinamen in Leerzeichen mit Firstnamein %%f, LASTNAMEin %%gund dem gesamten Rest des Dateinamens in auf %%h;
  • Da keine eingebetteten Schleifen vorhanden sind, ist keine verzögerte Erweiterung erforderlich (die Schleifenvariablen sind implizit verzögert). und
  • Der dirBefehl enthält kein Verzeichnis , daher ist in der Variablenerweiterung keine spezielle Verzeichnisbehandlung erforderlich.

Wenn das Skript mit einem übergebenen Verzeichnisnamen arbeiten muss, umgeben Sie die obigen Angaben mit pushd %1und popd.

AFH
quelle
Vielen Dank dafür. Manchmal gab es mehr als fünf Token (zweiter Vorname, zusätzlicher Mist), die durcheinander gebracht wurden. Mein Workaround bestand darin, mehr Token zu erstellen, aber wenn sie leer waren, führten sie zu einem lästigen Leerzeichen im Dateinamen.
Lolsail
@lolsail - Ich denke, meine Antwort deckt dies ab, da es den Namen in drei Token aufteilt, Vorname, Nachname und den Rest. Wenn Sie sagen, dass es einen zweiten Vornamen oder Initialen zwischen dem Vor- und Nachnamen geben könnte, wird das Problem sehr viel komplexer, und Sie müssten wahrscheinlich die Verarbeitung regulärer Ausdrücke verwenden.
AFH
Die mittleren Anfänge sind selten genug, um die wenigen manuell zu beheben. Jetzt versuche ich nur, es beim Durchlaufen von Unterverzeichnissen zum Spielen zu bringen (Es nimmt das Verzeichnis als erstes Token und endet in etwa wie folgt: LASTNAME Dir \ Firstname, was natürlich einen Syntaxfehler zurückgibt)
lolsail
okay, herausgefunden, wie man die variablen Modifikatoren richtig benutzt, das war meine Lösung: ren "%%~dpf%%~nf %%g %%h" "%%g %%~nf %%h"
lolsail
Ich habe über Ihren vorherigen Kommentar nachgedacht, als Ihre Lösung auftauchte. Gut gemacht, das zu finden!
AFH