cr0sscut
Goto Top

Ordnernamen auf die ersten 7 Zeichen reduzieren.

Hallo zusammen,

bei folgendem Problem benötige ich eure Hilfe:

Ich habe eine Ordnerstruktur die so aussieht:

T:\Ordner\Unterordner\UnterUnterordner\

Die „UnterUnterordner“ sollen vom Namen her auf die ersten 7 Zeichen reduziert werden … das habe ich mit folgendem Quellcode versucht:

:UMBENENNEN

for /d %%i in ("T:\Ordner\Unterordner\*") do for /d %%j in ("%%i\*") do (  

            set "name=%%~nxj" && echo ren "%%j" "%name:~0,7%"  

            )

)

Leider benennt er so jeden in Unterordner befindenden Ordner nach dem letzten Ordner um. Kann man in der Batch irgendwie festlegen, dass Ordner für Ordner abgearbeitet wird?

Liebe Grüße,

cr0sscuT

Content-ID: 213218

Url: https://administrator.de/forum/ordnernamen-auf-die-ersten-7-zeichen-reduzieren-213218.html

Ausgedruckt am: 25.12.2024 um 19:12 Uhr

Biber
Biber 02.08.2013 um 14:51:23 Uhr
Goto Top
Moin cr0sscut,

es würde schon helfen, wenn du "Setlocal EnableDelayedExpansion" als neue erste Zeile verwendest und dann das ""%name:~0,7%" in "!name:~0,7!" änderst.

Aber dennoch ist es ein Schönwetterbatch:
  • es wird nicht geprüft, ob die umzubenamsenden Ordner überhaupt mehr als 7 Zeichen haben
  • es wird nicht geprüft, ob vielleicht mehrere Ordner auf den gleichen 7stelligen Namen verkürzt werden.

Mach erstmal eine Version v 0.02beta fertig, dann schauen wir weiter.

Grüße
Biber
bastla
bastla 02.08.2013 aktualisiert um 15:17:30 Uhr
Goto Top
... wobei es noch sicherer wird, wenn "delayedexpansion" erst nach Zuweisung der Schleifenwerte an Variable aktiviert wird, da so auch die "!"-Problematik umschifft werden kann - also etwa:
:UMBENENNEN

for /d %%i in ("T:\Ordner\Unterordner\*") do for /d %%j in ("%%i\*") do (  
    set "Ordner=%%~fj" & set "name=%%~nxj"  
    setlocal enabledelayedexpansion
    echo ren "!Ordner!" "!name:~0,7!"  
    endlocal
    )
)
BTW: Wenn der Name schon vorher nicht mehr als 7 Zeichen lang war, passiert weiter nix Schlimmes ...

Grüße
bastla
cr0sscut
cr0sscut 05.08.2013 um 11:08:19 Uhr
Goto Top
Hallo,

danke schonmal. Klappt super! face-smile

Nun steh ich vor einem neuen Problem, worüber ich vorher nicht nachgedacht habe.

Und zwar kommt es vor, dass die Ordner auf den ersten 7 Zeichen gleich heißen, also das sieht wie folgt bei mir aus:

Name_Pos_001_a_TYP_Größe
Dateiname-S.pdf
Name_Pos_002_a_TYP_Größe
Dateiname-S.pdf

„Name“ ist immer 7 Zeichen lang. Sprich alles ist gleich, außer die Nummern unterscheiden sich. Es kommt aber auch schonmal vor, dass die Nummern die Gleichen sind, die nachfolgenden Buchstaben dann aber unterschiedlich, wie zum Beispiel:

Name_Pos_001_a_TYP_Größe
Dateiname-S.pdf
Name_Pos_001_b_TYP_Größe
Dateiname-S.pdf

Kann man die Ordner iwie zusammenführen?

Dann aber noch ein weiteres Problem … die Dateinamen. Diese sind auch exakt die Gleichen -> Probleme beim Zusammenführen. Ist es möglich ein Teil des ursprünglichen Ordnernamen, also „Name_Pos_001_a“ dem „-S.pdf“ davor zu setzen, sprich

Name_Pos_001_a-S.pdf

Ich hoffe das ist verständlich was ich bräuchte.

Liebe Grüße,

cr0sscuT
bastla
bastla 05.08.2013 um 11:25:28 Uhr
Goto Top
Hallo cr0sscuT!

Es wäre also ok, Dateien aus mehreren Ordnern (wenn letztere mit den gleichen 7 Zeichen beginnen) zusammen zu fassen?

Wenn ja:
  • Befinden sich in den Ordnern nur PDF-Dateien?
  • Enden die Namen aller PDF-Dateien auf "-S"?
  • Enthalten die Namen der PDF-Dateien noch weitere "-"?

Grüße
bastla
cr0sscut
cr0sscut 05.08.2013 um 13:41:55 Uhr
Goto Top
Hallo bastla,

Richtig, das sollte sogar so sein!

- Dateiendungen kommen unterschiedliche vor, also nicht nur PDF
- Auch andere Endungen im Dateinamen sind möglich, jedoch immer vorab Name-Pos-00X-X-...
- ja, Name, Pos, Nummer und Index sollten alle durch einen - getrennt werden, nicht wie oben geschrieben mit einem _

Danke und Grüsse,

Cr0sscuT
bastla
bastla 05.08.2013 aktualisiert um 19:22:13 Uhr
Goto Top
Hallo cr0sscuT!

Haben die Dateinamen (wie "Dateiname-S.pdf") einen einheitlichen Aufbau, enden sie insbesondere mit "-" und genau einem weiteren Zeichen, das dann im neuen Namen enthalten sein soll?

Außerdem: Gibt es auch noch Unterordner?

Grüße
bastla
cr0sscut
cr0sscut 06.08.2013 um 07:19:41 Uhr
Goto Top
Hallo bastla,

danke für deine Antwort.

Folglich die Dateinamen, welche möglich sind:

Name-Pos-00X-X-t.pdf
Name-Pos-00X-X-ts.pdf
Name-Pos-00X-X-tz.pdf
Name-Pos-00X-X-v1l.pdf
Name-Pos-00X-X-v1r.pdf
Name-Pos-00X-X-v2l.pdf
Name-Pos-00X-X-v2r.pdf
Name-Pos-00X-X-n.pdf
Name-Pos-00X-X-k1.pdf
Name-Pos-00X-X-k2.pdf
Name-Pos-00X-X-k3.pdf
Name-Pos-00X-X-k4.pdf
Name-Pos-00X-X-scr.doc

Die ursprünglichen Ordner, welche auf 7 Zeichen gekürzt werden müssen sehen ja so z.B. aus:

1234567_000000_001_a_Typ_Größe

Kann man für die Dateinamen in diesem Fall dann nicht „einfach“ auf die ersten 21 Zeichen reduzieren und die „_“ in „-„ umwandeln?

Dabei können Name, Pos, Nummer und Index variieren von der Benennung her. Sie enden alle mit dem „-„ und 1 – 3 Zeichen dahinter, welche im neuen Namen enthalten sein sollen.

Unterordner könnten durch fehlerhafte Behandlung / Ablage des Bedieners vorkommen, ja.

Besten Dank & Grüße,

cr0sscuT
bastla
bastla 06.08.2013 um 09:44:18 Uhr
Goto Top
Hallo cr0sscuT!

Vollig ungetestet könnte das etwa so aussehen:
:UMBENENNEN

for /d %%i in ("T:\Ordner\Unterordner\*") do for /d %%j in ("%%i\*") do (  
    set "Ordner=%%i"  
    set "UOrdner=%%j"  
    set "UOName=%%~nxj"  
    setlocal enabledelayedexpansion
    set "Ziel=!Ordner!\!UOName:~,7!"  
    set "UOKennung=!UOName:~,21!"  
    set "UOKennung=!UOKennung:_=-!"  
    echo md "!Ziel!" 2>nul  
    for %%a in ("!UOrdner!\*.*") do (  
        for /f "tokens=5 delims=-" %%b in ("%%~na") do (       
            echo move "%%a" "!Ziel!\!UOKennung!-%%b%%~xa"  
        )
    )
    for /d %%k in ("%%j\*") do echo move "%%k" "!Ziel!"  
    echo rd "!UOrdner!"  
    endlocal
)
Die "echo" in den Zeilen 11, 14, 17 und 18 dienen zum Testen - es werden so alle Anweisungen danach nur angezeigt, aber nicht ausgeführt.

In Zeile 11 wird der neue Ordner (mit dem gekürzten Namen) erstellt, bzw die Fehlermeldung, wenn er bereits existiert, unterdrückt. Danach werden in den beiden folgenden Schleifen die Inhalte des Ordners in den neuen Ordner verschoben, wobei die Namen der Dateien angepasst werden.

Hinsichtlich der Dateinamen setze ich den beschriebenen Aufbau mit 5 Teilen, getrennt durch "-", von denen der 5. Teil "mitgenommen" werden soll, voraus. Aus den Ordnernamen ließen sich nach dem selben Schema (Trennzeichen allerdings "_") die ersten 4 Teile extrahieren, ich habe mich aber an Deinen Vorschlag mit den ersten 21 Zeichen gehalten.

Verbleibende Fehlerquellen:
  • Dateinamen mit enthaltenen "!"
  • gleichnamige Unterordner der zu verarbeitenden Ordner

Grüße
bastla
Biber
Biber 06.08.2013 aktualisiert um 14:25:05 Uhr
Goto Top
[OT] @bastla

Hab ich schon mal geschrieben, wie sehr ich deine Geduld bewundere?

Ich hatte schon gestern beim Mitverfolgen des Beitragsverlaufs etwas hyperventiliert und auch schon einen mehrzeiligen Kommentar fast fertig geschrieben, der allerdings keine einzige Batchzeile enthielt.

Das kann kann doch nicht sein, dass wir uns absolut planlos von freien Assoziationsketten eines Fragestellers treibenlassen und ihm durch gefühlte 157 suggestive Rückfragen einen Plan unterschieben, für den er sich vorher keine zwei Zehntelsekunden Zeit genommen hat.

@cr0sscut
Das kann ich mir wirklich nicht vorstellen, dass ihr in eurem Laden wirklich so arbeitet - erstmal irgendwie anfangen, dann können wir schon die begonnene Realisierung melden, danach schauen wir uns die Kollateralschäden an und machen ein Folgeprojekt draus.

Von 4 Tagen Laufzeit dieses Beitrags hätten wir - eine Auseinandersetzung mit dem Konzept vorausgesetzt - dreieinhalb einsparen können.

Das musste ich loswerden - dafür habe ich den Beitrag aber nicht in die Tonne gekloppt.

Grüße
Biber
[/OT]
bastla
bastla 06.08.2013 um 12:16:42 Uhr
Goto Top
[OT] @ Biber
Geduld
Spieltrieb beschreibt's wohl besser ... face-wink

Ansonsten hattest Du natürlich (schon ganz oben) wieder einmal Recht. face-smile

Grüße
bastla
[/OT]
Biber
Biber 06.08.2013 um 12:42:54 Uhr
Goto Top
[auch OT]@ bastla

Okay, bei dir ist es Spieltrieb, aber bei mir setzt bei gewissen Beiträgen ein so genannter Spültrieb ein...

... und nachdem es heute auch eine Fortsetzung von Swanni und die TempTables gibt - den dritten Beitrag dieser Art werde ich wahrscheinlich etwas unangemessen kommentieren.

Grüße
Biber
[/auch OT]
bastla
bastla 06.08.2013 um 12:50:38 Uhr
Goto Top
[weiterhin OT] @ Biber
nachdem es heute auch eine Fortsetzung von Swanni und die TempTables gibt
Ich hatte, als ich gestern Teil 2 gesehen habe, das ja zunächst auf ein hitzebedingtes Déjà-vu meinerseits zurückgeführt ...
den dritten Beitrag dieser Art werde ich wahrscheinlich etwas unangemessen kommentieren.
... was ich wiederum durchaus angemessen fände. face-wink

Grüße
bastla
[/weiterhin OT]