brause1701
Goto Top

Dateien (PDF) umbenennen via batch, teilw. Dateinamen übernehmen, neues Präfix

Hallo zusammen,

ich habe ein relativ einfach zu erklärendes Problem welches ich gern mit einem kleinen Script (batch) lösen möchte:

Ich habe mehrere hundert PDF-Dateien in einem Ordner und möchte diese Kopieren und umbenennen. Dabei sollen die letzten fünf Zeichen erhalten bleiben und zusätzlich ein neues Präfix vergeben werden. Beispiel:

Quell-Pfad: franz_12345.pdf, tina_54321 >> Ziel-Pfad: gesamt_12345.pdf, gesamt_54321

Die letzten fünf Zeichen sind immer eindeutig (Schlüsselattribut aus einer DB).

Ich hoffe auf eure Hilfe!

Gruß,

(Kommentare in Script-Vorschlägen nehme ich mit großem Dank an!)

Content-Key: 325920

Url: https://administrator.de/contentid/325920

Ausgedruckt am: 19.03.2024 um 07:03 Uhr

Mitglied: H41mSh1C0R
H41mSh1C0R 10.01.2017 um 06:22:20 Uhr
Goto Top
Moin,

so aus der kalten.

z.B.

@for /f "tokens=1* delims=_" %%i in ('dir /b "D:\test\*_*"') do @echo copy "D:\Test\%%i_%%j" "D:\Test\Ziel\gesamt_%%j"  

Pfad noch anpassen so wie du ihn brauchst.

VG
Mitglied: brause1701
brause1701 10.01.2017 um 07:33:02 Uhr
Goto Top
Guten morgen und erstmal Danke für das schnelle Feedback!

Leider hatte ich noch keinen Erfolg. In den Dateinamen kommen häufig weitere "_" (Unterstriche) vor... sorry mein Fehler!
Korrigiertes Beispiel:
Quell-Pfad: schulze_franz_45_12345.pdf, mueller_tina_36_54321 >> Ziel-Pfad: gesamt_12345.pdf, gesamt_54321

Ich ging davon aus, dass man eine Liste erzeugt, anschließend die Namens-Strings zerlegt und dann gewissermaßen neue Strings zusammensetzt und jeweils zuweist.
Mitglied: 131381
Lösung 131381 10.01.2017 aktualisiert um 10:00:05 Uhr
Goto Top
@echo off
set "quelle=c:\quelle"  
set "ziel=c:\ziel"  
set "prefix=gesamt"  
powershell -Executionpolicy Bypass -Command "gci '%quelle%' -Filter *.pdf | copy-item -Destination {\"%ziel%\%prefix%_$($_.Name -replace '.*(.{5}\.pdf)$)','$1'\"}"  
oder auch
@echo off &setlocal EnableDelayedexpansion
set "quelle=c:\quelle"  
set "ziel=c:\ziel"  
set "prefix=gesamt"  
for %%a in ("%quelle%\*.pdf") do (  
    set "name=%%~nxa"  
    set "suffix=!name:~-9!"  
    copy "%%a" "%ziel%\%prefix%_!suffix!"  
)
Gruß mik
Mitglied: brause1701
brause1701 10.01.2017 um 12:34:45 Uhr
Goto Top
Super vielen Dank!

Wenn du mir noch kurz die zwei Zeilen in der Schleife erklären könntest wäre das großartig:
    set "name=%%~nxa"  
    set "suffix=!name:~-9!"  

Was bedeutet "~nxa" und "~-9"?

Nochmal, vielen Dank!
Mitglied: 131381
Lösung 131381 10.01.2017 aktualisiert um 12:42:06 Uhr
Goto Top
Zitat von @brause1701:
Was bedeutet "~nxa" und "~-9"?
set "name=%%~nxa"
%%~nxa bedeutet kürze auf Name(n) und Dateierweiterung(x).
Ein for /? in der CMD sagt's dir auch.
...
Zusätzlich wurde die Ersetzung von Verweisen auf FOR-Variablen erweitert.
Sie können jetzt folgende Syntax verwenden:

    %~I         - Expandiert %I und entfernt alle umschließenden
                   Anführungszeichen (").
    %~fI        - Expandiert %I zu einem vollständigen Dateinamen.
    %~dI        - erstellt nur den Laufwerkbuchstaben von %I.
    %~pI        - erstellt nur den Pfad von %I.
    %~nI        - erstellt nur den Dateinamen von %I.
    %~xI        - erstellt nur die Dateierweiterung von %I.
    %~sI        - erstellter Pfad enthält nur kurze Dateinamen.
    %~aI        - erstellt die Dateiattribute von %I.
    %~tI        - erstellt Datum und Zeit von %I.
    %~zI        - erstellt die Dateigröße von %I.
...

set "suffix=!name:~-9!"
Und das ~-9 extrahiert die letzten 9 Zeichen des Dateinamens (Dateierweiterung und Punkt inkl.)
Siehe:
http://www.dostips.com/DtTipsStringManipulation.php

Nochmal, vielen Dank!
Keine Ursache.

Gruß mik
Mitglied: brause1701
brause1701 10.01.2017 um 14:55:26 Uhr
Goto Top
~-9 ... mit Punkt und Dateiendung! Da hätte ich auch selbst drauf kommen können!

Danke!