hboltz
Goto Top

Dateinamen per Batch ändern

Hallo,

ich bin Netzwerker und habe mit Programmierung nicht viel zu tun. Daher ist die Frage vermutlich auch total simpel, aber ich krieg's mit lesen der Beiträge nicht hin! Also, deshalb hier die Problematik:

Ich habe in einem Ordner hunderte Dateien, die folgende Namenskonvention haben:

001-diversenamen.pdf

Ich möchte jetzt in die Mitte des Dateinamens noch etwas einbauen, so daß die Files nachher wie folgt heißen:

001-200901-diversenamen.pdf

Ich weiß, dass es jede Menge Tools gibt, die das problemlos können, aber ich muss das immer wieder machen und das auch noch in verschiedenen Ordnern mit verschiedenen Konventionen, so dass Tools einfach zu aufwändig sind.

Vielen Dank für Eure Hilfe!

HoBo

Content-Key: 106484

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

Printed on: April 23, 2024 at 23:04 o'clock

Member: bastla
bastla Jan 19, 2009 at 17:16:04 (UTC)
Goto Top
Hallo hboltz und willkommen im Forum!

Sollte sich von der Kommandozeile so machen lassen:
for /f "tokens=1* delims=-" %i in ('dir /b "D:\Daten\*-*.pdf"') do @echo ren "D:\Daten\%i-%j" "%i-200901-%j"
Das "@echo" dient dazu, die Umbenennungen zuerst nur anzeigen zu lassen - wenn alles OK aussieht, die gleiche Zeile ohne "@echo" verwenden, um tatsächlich die Namen zu ändern.

Falls Du das in einen Batch verwandeln willst, jeweils %%i und %%j anstatt %i und %j verwenden.

Grüße
bastla
Mitglied: 60730
60730 Jan 19, 2009 at 17:16:23 (UTC)
Goto Top
Servus und willkommen,

zu deiner Frage:

Ich möchte jetzt in die Mitte des Dateinamens noch etwas einbauen, so daß die Files nachher wie folgt heißen:
001-diversenamen.pdf
001-200901-diversenamen.pdf

Mit anderen Worten:

  • die "MItte" ist das 4. Zeichen, oder das Zeichen nach dem Bindestrich?
  • Der Schnippsel, der eingefügt werden soll, ist ein Datum?
  • "Das" Datum von heute?
  • "Das" Datum der Datei?

Gruß
edit... ohne Worte - fast fasta bastla face-wink /edit
Member: hboltz
hboltz Jan 19, 2009 at 17:35:16 (UTC)
Goto Top
funktioniert auf der Kommandozeile - wie sähe nun der Batchfile aus, wenn ich den schon im entsprechenden Verzeichnis ausführen würde? Danke !!!
Member: hboltz
hboltz Jan 19, 2009 at 17:36:48 (UTC)
Goto Top
zu 1 - ja - hinter dem Bindestrich soll was rein
zu 2 - manchmal, aber nicht immer
zu 3+4 - siehe 2

Gruß
HoBo
Mitglied: 60730
60730 Jan 19, 2009 at 17:39:56 (UTC)
Goto Top
Servus again,

naja meine Fragen haben sich ja durch fasta Bastla schon quasi in Luft aufgelöst face-wink

Aber zu deiner Frage zurück, bastla hat es ja schon vorzelebriert:

Aus jedem % machst du %%
for /f "tokens=1* delims=-" %%i in ('dir /b "D:\Daten\*-*.pdf"') do @echo ren "D:\Daten\%%i-%%j" "%%i-200901-%%j"  
Member: bastla
bastla Jan 19, 2009 at 17:41:29 (UTC)
Goto Top
Hallo hboltz!

Wie schon erwähnt - Unterschied eigentlich nur hinsichtlich %%i, %%j:
@for /f "tokens=1* delims=-" %%i in ('dir /b "D:\Daten\*-*.pdf"') do @echo ren "D:\Daten\%%i-%%j" "%%i-200901-%%j"  
Wenn Du den Batch in den entsprechenden Ordner legst, dann:
@for /f "tokens=1* delims=-" %%i in ('dir /b *-*.pdf') do @echo ren "%%i-%%j" "%%i-200901-%%j"  
Grüße
bastla
Member: bastla
bastla Jan 19, 2009 at 17:45:10 (UTC)
Goto Top
@timobeil
Biber würde Dich jetzt Rechtsüberholer nennen ... face-wink

naja meine Fragen haben sich ja durch fasta Bastla schon quasi in Luft aufgelöst face-wink
Ganz im Gegentum; die Fragen waren durchaus gerechtfertigt (und hätte ich heute mehr Zeit, wären sie vermutlich so ähnlich auch von mir gekommen) - ich hatte einfach nur aus der Hüfte geschossen und zufällig getroffen ...

Grüße
bastla
Member: hboltz
hboltz Jan 19, 2009 at 19:04:04 (UTC)
Goto Top
PRIMA!!! Vielen Dank! Es funktioniert. Allerdings muss ich ehrlich zugeben, dass ich die Syntax nicht verstehe. Hast Du vielleicht einen Link für mich, wo ich die Parameter nachlesen kann und wo diese erklärt werden?

Danke noch mal und Gruß
HoBo
Member: bastla
bastla Jan 19, 2009 at 19:52:13 (UTC)
Goto Top
Hallo hboltz!

Hast Du vielleicht einen Link für mich, wo ich die Parameter nachlesen kann und wo diese erklärt werden?
Einfach einmal "for /f" an der Kommandozeile eingeben und durch die Online-Hilfe "durchbeissen" (analog bei Bedarf "dir /?" ode "ren /?") ...

... ansonsten könnte ich die eine Zeile ja kurz zu erklären versuchen:
for /f "tokens=1* delims=-" %%i in ('dir /b *-*.pdf') do 
Zerlege die einzelnen Zeilen der "dir"-Ausgabe (durch "/b" werden ausschließlich die Namen der Dateien, die dem Schema "*-*.pdf" entsprechen, ausgegeben) anhand des Trennzeichens (= "delimiter") "-", wobei nur in den Teil vor dem ersten Trennzeichen ("1") und den gesamten Rest nach dem ersten Trennzeichen ("*") zerlegt werden soll (auch wenn noch weitere "-" enthalten wären, würde dort nicht mehr getrennt werden) und stelle die beiden Teile als %%i und %%j (= nächster Buchstabe im Alphabet face-wink) zur Verfügung.

ren "%%i-%%j" "%%i-200901-%%j"
Dieser Teil wird für jede gefundene Datei durchgeführt.

Für das Umbenennen muss zunächst der alte Dateiname (grundsätzlich mit Pfad, aber hier nicht erforderlich, da der Batch schon im richtigen Ordner ausgeführt wird) angegeben werden. Dieser besteht aus dem Teil vor dem ersten "-", dem "-" und dem Rest dahinter - daher also "%%i-%%j". Die Anführungszeichen sind eigentlich nur erforderlich, wenn ein Pfad / Dateiname Leerzeichen enthält, aber da sie so gut wie nie stören, setze ich sie sicherheitshalber.

Der zweite Parameter des "ren"-Befehles ist der neue Dateiname (immer ohne Pfad). Dieser wird dann einfach aus den nötigen Teilen zusammengesetzt: %%i (Teil vor dem ersten "-" des ursprünglichen Namens), "-200901-" und "%%j" (Rest des alten Namens nach dem ersten "-").

Grüße
bastla
Member: hboltz
hboltz Jan 19, 2009 at 22:24:54 (UTC)
Goto Top
SUPER!!! Danke für die Info! Eine Frage bzw. ein Problem habe ich gerade noch festgestellt: wenn ich den Batch Job 2 mal starte, wird nochmals das Datum eingefügt. Kann man das irgendwie verhindern????

Danke und Gruß
HoBo
Member: bastla
bastla Jan 20, 2009 at 07:00:54 (UTC)
Goto Top
Hallo hboltz!

Da sich ja vermutlich "200901" in "200902" bis "200912", aber wohl auch "201001" etc, weiter entwickeln wird, wäre ev nur ein Umbenennen von Dateien, deren zweiter Namensbestandteil nicht mit "20" beginnt, eine Möglichkeit - ob damit dann Dateien auf der Strecke blieben, weil deren (lt Deinem oben dargestellten Schema) "diversenamen.pdf"-Teil ohnehin bereits mit "20" anfängt, musst Du selbst abschätzen.
for /f "tokens=1* delims=-" %%i in ('dir /b *-*.pdf') do echo %%j|findstr /b "20">nul || ren "%%i-%%j" "%%i-200901-%%j"
Grüße
bastla