Verschieben Sie datierte Dateien in ihre entsprechenden datierten Ordner

871
Michael

Ich habe .pdf-Dateien mit dem Datum am Ende ihres Namens, z. B. "BINNAWAY - WERRIS CK - 483.94 - 120612".

Ich habe Ordner nach den Datumsangaben dieser Dateien benannt, z. B. "12-06-2012".

Wie kann ich alle Dateien basierend auf dem Datum in ihrem Namen in ihre entsprechenden Ordner verschieben?

Ich bin unter Windows XP.

Würde mich über einen Rat freuen.

Vielen Dank

3

3 Antworten auf die Frage

1
user309970

@ and31415 Ihr Code hat einige Dateien bearbeitet. Es gibt jedoch viele andere, bei denen dies nicht funktioniert hat, da nicht alle Dateien in dem angegebenen Format vorliegen <name1> - <name2> - <some numbers> - <date>. Einige können im Format <name1> - <some numbers> - <date>oder etwas anders sein. Alle Dateien enden jedoch mit - <date>den folgenden möglichen Anordnungen: "- 120612", "- 120612 (1)", "- 120612 (2)" oder "- No Date". Wie kann ich es so machen, dass nur der Text nach dem letzten Bindestrich berücksichtigt wird?

Schätzen Sie alle Ihre Hilfe.

Michael

0
and31415

Das folgende Batch-Skript geht davon aus, dass:

  • Alle Dateinamen haben das Format <name> - [...] - <some numbers> - <date>.
  • Alle Jahre sind im Bereich 2000-2099.

Kopieren Sie einfach den Code, fügen Sie ihn in eine neue Textdatei ein und speichern Sie ihn als MoveFiles.cmd(oder wie auch immer, solange Sie die .cmd Erweiterung behalten ).

@echo off setlocal setlocal enabledelayedexpansion  for /r %%A in (*.pdf) do ( set date= call :getLastToken "%%~nA" for /f "tokens=1" %%B in ("!last!") do set date=%%~B echo "!date!"|findstr "^\"[0-3][0-9][0-1][0-9]*\"$" >nul if !errorlevel! == 0 ( set targetFolder=!date:~0,2!-!date:~2,2!-20!date:~4,2! if not exist "!targetFolder!\" md "!targetFolder!" move "%%~fA" "!targetFolder!" >nul ))  endlocal & exit /b  :getLastToken set "str=%~1" :loop for /f "tokens=1* delims=-" %%A in ("%str%") do ( set "last=%%A" set "str=%%B" ) if defined str goto :loop exit /b 

Wie es funktioniert

  1. Alle .pdfDateien im aktuellen Ordner auflisten.

  2. Rufen Sie jeden Dateinamen ab und token Sie ihn.

  3. Stellen Sie sicher, dass die abgerufenen Zeichen tatsächlich Zahlen sind:

    Die Variable wird hallt und dann geleitet, um den findstrBefehl, der einen verwenden regulären Ausdruck alphabetische Zeichen übereinstimmen.

    • ^ entspricht dem Zeilenanfang;
    • \"passt zu einem direkten Anführungszeichen ( ");
    • [0-9]definiert eine Zeichenklasse, die mit einem beliebigen Zeichen von 0 bis 9 übereinstimmt;
    • * wiederholt null oder mehr Vorkommen der vorherigen Klasse;
    • $ entspricht dem Zeilenende.

    Darüber hinaus versucht der reguläre Ausdruck so viele gültige Daten wie möglich zu finden. Die !errorlevel!Variable wird gesetzt, 0wenn eine Übereinstimmung vorliegt oder 1nicht. Die findstrAusgabe wird dann umgeleitet nulund somit ignoriert.

  4. Erstellen Sie den Zielordner, falls er noch nicht vorhanden ist.

  5. Verschieben Sie die aktuelle Datei in den entsprechenden Ordner.

Lesen Sie weiter

Einige Dateien können auch den Titel "BINNAWAY - WERRIS CK - 483.94 - 120612 (1)" oder "BINNAWAY - WERRIS CK - 483.94 - 120612 (2)" oder "BINNAWAY - WERRIS CK - 483.94 - Kein Datum" tragen. Zu viele davon, also würde ich mich freuen, wenn Sie nur diejenigen verschieben, die im Datum enden, wie "BINNAWAY - WERRIS CK - 483.94 - 120612". Außerdem habe ich den Ordner mit allen PDF-Dateien geöffnet und das Skript in der Eingabeaufforderung ausgeführt (ich nehme an, dafür ist das Skript gedacht), aber es ist nichts passiert. Geht Ihr Skript davon aus, dass ich irgendwo den Ordner angeben muss, der alle datierten Ordner enthält? user309970 vor 10 Jahren 0
@ user309970 Ich habe das Skript verbessert, um Dateien mit dem Namen "BINNAWAY - WERRIS CK - 483.94 - 120612 (1)" zu behandeln, und ich habe einen Fehler im Zusammenhang mit dem Datumsabruf behoben. Dateien ohne gültige Nummern werden nicht verschoben. Vielleicht habe ich es nicht klar genug gemacht, aber da es sich um ein Batch-Skript handelt, ist es nicht dafür gedacht, es so auszuführen, wie es ist: Sie müssen den Code in einer neuen Textdatei speichern und sicherstellen, dass die [Erweiterung] (http: // support.) microsoft.com/kb/865219/en-us) ist `.cmd`. Dann können Sie das Batch-Skript einfach in den Ordner verschieben, der die `.pdf-Dateien enthält, und es mit einem Doppelklick ausführen, um den Code auszuführen. Erfolgreich getestet mit Windows XP und 7. and31415 vor 10 Jahren 0
0
user263743

Hallo, ich dachte nur, ich würde mich über die von mir gemachten Fortschritte informieren und ein paar Rückmeldungen zu meinen eigenen Fragen geben. Zur Berücksichtigung von Dateien mit dem Namensformat <name1> - <some numbers> - <date> statt <name1> - <name2> - <some numbers> - <date>wie angenommen von @ and31415 im Drehbuch, das er zur Verfügung gestellt, habe ich gerade geändert, tokens=4umtokens=3in einer neuen .cmd-Datei. Das hat funktioniert. Trotzdem wurden viele Dateien von diesen Batch-Skripts nicht verarbeitet. Ich fand heraus, dass das Skript nur einige der Dateien im Ordner verarbeitete (es verarbeitete nur 50 bis 100 PDF-Dateien und ich habe Tausende von PDF-Dateien, die ich durchgehen muss). Deshalb habe ich einen neuen Ordner erstellt und die überschüssigen PDF-Dateien dort gespeichert und lief die Batch-Skripts dort. Es werden immer noch viele PDF-Dateien nicht verarbeitet, aber ich durcharbeite jeweils 50-100 pdfs in einem neuen Ordner und es sollte ziemlich schnell erledigt werden. Nicht ideal, aber dennoch viel besser als manuell nacheinander! Danke für deine Hilfe @ and31415 :)

Ich habe mein ursprüngliches Skript so aktualisiert, dass es mit allen Dateien funktioniert, die mit `- enden. `. and31415 vor 10 Jahren 0