sl0w2k5
Goto Top

Per Batch Datei, Teile von Dateinamen ändern oder hinzufügen

Hallo und guten Morgen zusammen,

ich habe folgendes Problem, welches zu lösen gilt und ich hoffe, ihr könnt mir helfen.

Ich habe einen Hauptordner mit mehreren Unterordnern, in denen sich Dateien mit verschiedenen Formaten befinden.
Die Dateinamen sind verschieden und auch unterschiedlich lang.
Vor jedem Dateinamen muss das aktuelle Datum ergänzt werden.

Bsp:

Bild01.jpg muss nachher 121115 Bild01.jpg heißen usw.

Habt ihr mir da eine Batchlösung die das umsetzen kann?
Am besten eine die ich nicht in jeden Unterordner ausführen muss, da es sehr viele sind.

Sie soll auch nur die Dateien in den Unterordnern umbenennen und nicht alles.

Also

PFAD01/Unterordner 1-X

Die batch soll nun hier liegen:

PFAD01/Umbennen.bat

Und bennenen soll sie nur die Unterordner 1-X


Ich hoffe ich habe mich verständlich ausgedrückt und bedanke mich schonmal für eure Bemühungen.

Viele Grüße

sL0w2k5
Kommentar vom Moderator Biber am 15.11.2012 um 11:41:56 Uhr
Zitat von @andimue:
Bei Eingabe der Suchbegriffe "umbennenen" und "batch" kommen reichlich Treffer
Ja, leider.
Set /a rgc+=1
#851
Zitat von @Hitman4021:
-Zum Umbenenen benutzt du am besten move oder ren
set /a rgc+=1
#852
[Edit Nachtrag]

Zitat von @sL0w2k5:
----
Die batch soll nun hier liegen:
PFAD01/Umbennen.bat
Set /a rgc+=1
#853
[/Edit Nachtrag]
Und bennenen soll sie nur die Unterordner 1-X
[Edit Nachtrag2]
Set /a rgc+=1
#854
[/Edit Nachtrag2 & Thx@bastla]

Content-Key: 194266

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

Ausgedruckt am: 28.03.2024 um 10:03 Uhr

Mitglied: andimue
andimue 15.11.2012 aktualisiert um 13:44:34 Uhr
Goto Top
Guten Morgen auch dir,

hast du schonmal die Suchfunktion hier im Forum verwendet? Bei Eingabe der Suchbegriffe "umbenennen" und "batch" kommen reichlich Treffer

Viele Grüße
Mitglied: sL0w2k5
sL0w2k5 15.11.2012 um 07:59:32 Uhr
Goto Top
Hallo andimue

Die habe ich bemüht aber leider bin ich nicht auf eine befriedigende Lösung gefunden.
So gut kenn ich mich nicht aus um es umzuschreiben.

Grüße
Mitglied: Hitman4021
Hitman4021 15.11.2012 aktualisiert um 12:12:48 Uhr
Goto Top
Hallo,

ich schreibe dir jetzt mal ein paar Ansatzpunkte auf:
-Die Variable %date% enthält das aktuelle Datum.
-Zum Umbenennen benutzt du am besten move oder ren
-Zum durchlaufen nimmst du ne For Schleife die rekursiv in die Ordner geht.

Das Könnte ungefähr so aussehen (UNGETESTET!)
@echo off && setlocal
dir /b /s *.jpg > temp.txt
call :LaufeOrdnerDurch
goto :eof

:LaufeOrdnerDurch
for %%f in (temp.txt) do set "SourcName=%%~nf" & call :Verschiebe "%%f"  
goto :eof

:Verschiebe
ren %1 "%SourcName:~,15%%~x1"  
goto :eof

Gruß

@Biber Danke ist korrigiert!
Mitglied: andimue
andimue 15.11.2012 um 11:23:38 Uhr
Goto Top
Noch ein Hinweis:

am Anfang des Skriptes sollte man noch in das Laufwerk + Verzeichnis wechseln, in dem das Skript steht, in deinem Fall also z.B. nach PFAD01


rem  Wechseln ins Laufwerk
%~d0
rem  Wechseln ins Verzeichnis
cd %~p0

Beschrieben sind die Parameter im CALL-Kommando ( call /? )
Mitglied: bastla
bastla 15.11.2012 um 18:58:43 Uhr
Goto Top
@ andimue

Wenn du schon nicht "pushd" verwendest, dann doch bitte wenigstens "cd /d" (und dass Dateinamen / Pfade gelegentlich Leer- oder Sonderzeichen enthalten, solltest Du auch berücksichtigen) ...

Grüße
bastla
Mitglied: bastla
bastla 15.11.2012 aktualisiert um 19:11:12 Uhr
Goto Top
@ Hitman4021

Besonders elegant ist die Variante mit Temp-Datei ja eigentlich nicht - und schon gar nicht, wenn Du die dann mit "for" ohne "/f" auslesen willst - daher vielleicht besser doch so:
@echo off & setlocal
set "Datum=%date:~-2%%date:~-7,2%%date:~-10,2%"  
for /f "delims=" %%i in ('dir /s /b *.jpg') do echo ren "%%i" "%Datum% %%~nxi"  
Das "echo" vor dem "ren" dient übrigens dem gefahrlosen Testen, da so die Umbenenn-Befehle nur angezeigt werden ...

Grüße
bastla
Mitglied: bastla
bastla 15.11.2012 um 19:10:39 Uhr
Goto Top
Hallo sL0w2k5 und willkommen im Forum!

Lässt sich "Und bennenen soll sie nur die Unterordner 1-X" noch etwas präzisieren (zB im Hinblick auf die Frage, ob tatsächlich nur Dateien aus den Unterordnern, aber nicht jene aus dem Ordner "PFAD01", verarbeitet werden sollen, oder, ob sämtliche oder doch nur die jpg-Dateien umbenannt werden sollen)?

Grüße
bastla
Mitglied: sL0w2k5
sL0w2k5 16.11.2012 um 06:53:04 Uhr
Goto Top
Guten Morgen zusammen und vielen Dank für die zahlreichen Antworten!

@bastla

die Ordnerstruktur sieht so aus:

PFAD1/Ordner1
'----/Ordner2
'----/Ordner3 usw.
'----/umbenennen.bat

Die Unterordner sind alle unterschiedlich benannt und folgen keinem Muster.

Es sollen tatsächlich nur die Dateinen aus den Unterordnern geändert werden, da es sich bei "PFAD1" um einen Tagesordnert handelt.

Das mit den jpg-Dateien war nur als Beispiel gedacht, es sollen sämtliche umbenannt werden. Es können alle möglichen Dateiendungen vorhanden sein.

Vielen Dank für eure Bemühungen!
Mitglied: sL0w2k5
sL0w2k5 16.11.2012 um 07:11:11 Uhr
Goto Top
Um welche Zeilen muss es noch erweitert werden, um die Anzahl der umbenannten Datein, wie folgt, anzuzeigen:

Ordner 1 XY-Dateien
Ordner 2 XY-Dateien

usw?

Viele Grüße
Mitglied: andimue
andimue 16.11.2012 um 13:19:35 Uhr
Goto Top
Zitat von @bastla:
@ andimue

Wenn du schon nicht "pushd" verwendest, dann doch bitte wenigstens "cd /d" (und dass Dateinamen /
Pfade gelegentlich Leer- oder Sonderzeichen enthalten, solltest Du auch berücksichtigen) ...

Grüße
bastla

@ bastla

du hast natürlich Recht - wie immer face-smile
Aber manche Dinge sind so drin, die mach ich einfach automatisch (wobei zumindest aber ein cd in ein Verzeichnis mit Blank im Namen auch ohne Hochkommata funktioniert, deshalb hab ich mir wohl das " nicht angewöhnt)

Aber ich bin echt immer dankbar für nen Tipp

Gruß Andi
Mitglied: bastla
bastla 16.11.2012 um 16:13:28 Uhr
Goto Top
Hallo andimue!

Dass
ein cd in ein Verzeichnis mit Blank im Namen auch ohne Hochkommata funktioniert
ist mal eine echte Überraschung (wobei ich nie auf die Idee gekommen wäre, das überhaupt zu versuchen) - wieder was gelernt ... face-smile

Grüße
bastla
Mitglied: bastla
bastla 16.11.2012 um 16:43:59 Uhr
Goto Top
Hallo sL0w2k5!

Wenn der Vorgang auf Unterordner beschränkt sein muss, brauchst Du zunächst eine Schleife für diese Ordner:
@echo off & setlocal
set "Datum=%date:~-2%%date:~-7,2%%date:~-10,2%"  
for /d %%o in (D:\PFAD1\*) do (
    for /f "delims=" %%i in ('dir /s /b /a-d "%%o"') do echo ren "%%i" "%Datum% %%~nxi"  
)
Hinsichtlich der Anzahl der umbenannten Dateien ist nicht klar, worauf sie sich bezieht - soll sie neben "Ordner1" auch für "Ordner1\Unterordner1" ausgegeben werden, oder nur alle Dateien unterhalb von "Ordner1" zusammenfassen? Falls letztere Variante gewünscht wäre, etwa so:
@echo off & setlocal
set "Datum=%date:~-2%%date:~-7,2%%date:~-10,2%"  
for /d %%o in (D:\PFAD1\*) do call :ProcessDir "%%o"  
goto :eof

:ProcessDir
set /a Anzahl=0
for /f "delims=" %%i in ('dir /s /b /a-d %1^|findstr /bvc:"%Datum% "') do (  
    echo ren "%%i" "%Datum% %%~nxi"  
    set /a Anzahl+=1
)
echo %Anzahl% Dateien in %1
goto :eof
Natürlich wäre noch anzumerken, dass nur am selben Tag erkennbar ist, dass das Datum dem Dateinamen bereits hinzugefügt wurde (wird in Variante 2 kontrolliert) - wenn der Batch morgen oder in 2 Wochen wieder auf die selben Dateien "losgelassen" wird, würde natürlich jeweils das dann aktuelle Tagesdatum nochmals hinzugefügt. Abhilfe könnte hier ein Trennzeichen nach dem Datum (zB "_") schaffen:
for /f "delims=" %%i in ('dir /s /b /a-d %1^|findstr /v "\\[0-9][0-9][0-9][0-9][0-9][0-9]_"') do (
- bei dieser einfachen Variante würden allerdings auch alle Ordner, deren Name mit 6 Ziffern und "_" beginnt, ignoriert werden ...

Grüße
bastla
Mitglied: Jang09126
Jang09126 23.05.2023 um 10:54:36 Uhr
Goto Top
Hallo Bastla,
ich fand nach Suchen und Ausprobieren bisher keine Lösung für meine Problem.
Ich habe einen Dateiordner. In dem sind pdf-Dateinen enthalten.
Bei allen diesen pdf-Dateien müssen die Dateinamen geändert werden. Bspw. von so:
3455244_20230520_000000000000700-zp_101_0000000000000000000000000_ft.pdf.pdf
3458739_20230520_000000000000700-zp_101_0000000000000000000000000_ft.pdf.pdf
3458730_20230518_000000000000700-zp_101_0000000000000000000000000_ft.pdf.pdf
3464561_20230521_000000000000700-zp_101_0000000000000000000000000_ft.pdf.pdf
3464563_20230521_000000000000700-zp_101_0000000000000000000000000_ft.pdf.pdf
3487686_20230519_000000000000700-zp_101_0000000000000000000000000_ft.pdf.pdf
auf dieses Ziel (Bsp. letzte Zeile hier)
Ziel: 3487686_20230519_0700-zp.pdf

Probierte mit set rum und erzeugte eine batch-Datei. Brachte kein Ergebnis zustande.

Hoffe Du kannst helfen.

Danke im voraus.

FG Jan
Mitglied: 7010350221
7010350221 23.05.2023 aktualisiert um 11:40:13 Uhr
Goto Top
Zitat von @Jang09126:

Hallo Bastla,
ich fand nach Suchen und Ausprobieren bisher keine Lösung für meine Problem.
Ich habe einen Dateiordner. In dem sind pdf-Dateinen enthalten.
Bei allen diesen pdf-Dateien müssen die Dateinamen geändert werden. Bspw. von so:
3455244_20230520_000000000000700-zp_101_0000000000000000000000000_ft.pdf.pdf
3458739_20230520_000000000000700-zp_101_0000000000000000000000000_ft.pdf.pdf
3458730_20230518_000000000000700-zp_101_0000000000000000000000000_ft.pdf.pdf
3464561_20230521_000000000000700-zp_101_0000000000000000000000000_ft.pdf.pdf
3464563_20230521_000000000000700-zp_101_0000000000000000000000000_ft.pdf.pdf
3487686_20230519_000000000000700-zp_101_0000000000000000000000000_ft.pdf.pdf
auf dieses Ziel (Bsp. letzte Zeile hier)
Ziel: 3487686_20230519_0700-zp.pdf

Probierte mit set rum und erzeugte eine batch-Datei. Brachte kein Ergebnis zustande.

Hoffe Du kannst helfen.

Danke im voraus.

FG Jan

@echo off &setlocal enabledelayedexpansion
set "ordner=d:\daten"  
for %%a in ("%ordner%\*.pdf") do (  
     for /f "tokens=1-4 delims=_-" %%b in ("%%~na") do (  
          set num=%%d
          set num=!num:~-4!
          ren "%%a" "%%b_%%c_!num!-%%e%%~xa"  
     )
)
Für sowas nimmt man heutzutage eher gleich die PowerShell ...
Get-ChildItem 'd:\ordner' -file -Filter *.pdf | rename-item -NewName {$_.Name -replace '^(\d+_\d+)_.*?(\d{4}-[^_]+).*','$1_$2.pdf'} -verbose  

Gruß
Mitglied: Jang09126
Jang09126 23.05.2023 um 13:28:27 Uhr
Goto Top
Danke Ultramatic, bin doch eher zu ungebildet für die Programmierung. Habe jetzt den Tip eine anderen Chats beherzigt: Rename-Master. Funktioniert wie gewünscht.
Mitglied: 7010350221
7010350221 23.05.2023 aktualisiert um 13:52:47 Uhr
Goto Top
Wenn mans nicht programmatisch verwursten muss, klar, Klicki-Bunti für den Alltag geht immer. Dann darf der angestaubte Thread jetzt beruhigt wieder in seine Leichenstarre fallen face-big-smile.