gurkenhobel
Goto Top

Dateinamen durch vorangestellte Nullen auf gleiche Länge bringen

Hallo Gemeinde,
schon wieder stehe ich vor einen Problem und benötige Eure geschätzte Hilfe. Ich habe das Internet und auch das Forum hier durchforstet und die angebotenen Lösungen sind für Linux, PHP oder Python bzw. funktionieren nicht nach meinen Wünschen. Die im Netz angebotenen Programme tun dies auch nicht bzw. habe ich noch nicht das richtige gefunden. Vielleicht kann mir jemand einen Lösungsweg in VBS oder als Batchdatei aufzeigen, mit dem ich folgendes erreiche:
Die Dateinamen in einem Ordner sollen durch vorangestellte Nullen alle auf gleiche Länge gebracht werden, also z.B.
  • 1.jpg wird 00001.jpg
  • 14.jpg wird 00014.jpg
  • 111.jg wird 00111.jpg
  • 999.jpg wird 00999.jpg
  • 8888.jpg wird 08888.jpg
  • 12345.jpg bleibt
wobei sich also alles nach der Datei mit dem längsten Namen, in diesem Fall also um 12345.jpg richtet (5 Stellen Präfix). Bei dem zu ändernden Datei(nam)en handelt es sich ausschlöießlich um solche, die aus ZIffern bestehen.
Ich würde mich sehr freuen, wenn eine nachvollziehbare LÖsung gefunden würde und danke im voraus für Eure Mühe
Freundlichst GH

Content-ID: 7913072212

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

Ausgedruckt am: 26.11.2024 um 10:11 Uhr

7907292512
Lösung 7907292512 21.07.2023 aktualisiert um 10:40:02 Uhr
Goto Top
Moin.
Nichts leichter als das.

Powershell
$dir ='D:\Verzeichnis'  
$max = (Get-ChildItem $dir -File | %{$_.Basename.Length} | measure -Maximum).Maximum
Get-ChildItem $dir -File -Filter *.jpg | rename-item -NewName {"$($_.Basename.padleft($max,'0'))$($_.Extension)"} -verbose  
Batch
@echo off &setlocal enabledelayedexpansion
set max=5
for %%a in ("D:\Verzeichnis\*.jpg") do (  
    set "basename=0000%%~na"  
    ren "%%a" "!basename:~-%max%!%%~xa"  
)
Gruß siddius
kpunkt
kpunkt 21.07.2023 um 10:06:25 Uhr
Goto Top
Ich hab da aus Interesse mal eine AI befragt. Das ist das Ergebnis

$directory = "X:\Pfad\zum\Verzeichnis"  

$files = Get-ChildItem -Path $directory -File

$maxLength = ($files | ForEach-Object { $_.Name.Length } | Measure-Object -Maximum).Maximum


 foreach ($file in $files) {
     $newName = $file.Name.PadLeft($maxLength, '0')  
     $newPath = Join-Path -Path $directory -ChildPath $newName
    Rename-Item -Path $file.FullName -NewName $newPath
}
Gurkenhobel
Gurkenhobel 21.07.2023 um 10:08:49 Uhr
Goto Top
Hi siddius,
danke für die schnelle und kompetente Lösung. Da es für mich einfacher ist, die Batchdatei in den jwlg. Ordner zu kopieren anstelle das Batch jedesmal umzuschreiben, habe ich die 2. Zeile durch
for %%a in (".\jpg")  
ersetzt. Danke für die Hilfe
MfG GH
Gurkenhobel
Gurkenhobel 21.07.2023 um 10:48:29 Uhr
Goto Top
@kpunkt,
danke für das Angebot, aber das muss die AI-KI wohl noch etwas lernen, denn es tut sich nix. Das kann wohl aber nicht an den Leerzeichen im Ordnernamen liegen, oder ?
MfG GH
7907292512
7907292512 21.07.2023 aktualisiert um 10:56:12 Uhr
Goto Top
Zitat von @Gurkenhobel:

@kpunkt,
danke für das Angebot, aber das muss die AI-KI wohl noch etwas lernen, denn es tut sich nix. Das kann wohl aber nicht an den Leerzeichen im Ordnernamen liegen, oder ?
Dann hat deine Executionpolicy wohl angeschlagen, der Code selbst funktioniert wenn auch nur wenn die Endungen im Verzeichnis alle gleich lang sind, mein PS-Code berücksichtigt das ebenfalls in dem er nur die Länge des Basename statt des ganzen Namens inkl. Extension auswertet.
kpunkt
kpunkt 21.07.2023 aktualisiert um 11:45:36 Uhr
Goto Top
Das, was die AI ausgespuckt hat funktioniert schon. Ist halt sehr rudimentär. Mir ist aber auch gleich aufgefallen, dass er alle Zeichen, also den kompletten Namen samt Endung zählt. War aber auh nicht gefordert, da es sich ja ausschließlich um .jpg-Dateien handelt.
Man müsste da jweils "Name" durch "Basename" ersetzen. Auch $file.Name.PadLeft muss ein $file.Baseame.PadLeft werden.
Ansonsten ist es schon etwas bemerkenswert, was so eine AI aus dem Ärmel schüttelt. War ja nur eine kostenfreie Version.
Vor allem geht sie schrittweise an das Problem ran und erklärt alles. Ist für Programmierneulinge dann doch ziemlich hilfreich.

Aber! ich hatte schon mal einen anderen Code durch eine AI generieren lassen. Und der funktionierte nicht. War eine Kleinigkeit, aber ein Neuling kommt da im Leben nie drauf.
Um mal einen kleinen Schubs zu erhalten finde ich das aber ziemlich gut.
StefanKittel
Lösung StefanKittel 22.07.2023 um 11:57:06 Uhr
Goto Top
Wenn es kein Skript sein muss hilft der hier.
http://www.1-4a.com/rename/
Gurkenhobel
Gurkenhobel 22.07.2023 um 19:59:06 Uhr
Goto Top
@StefanKittel.
Danke für das Programm. Zwar kannte ich es von früher, wusste aber nicht mehr wie es heißt.
Tortz der gewohnungsbedürftigen Oberfläche erfüllt es auch seinen Zweck...
vy73, GH