106942
Goto Top

Dateinamen per Batch verkürzen

Hallo Administrator-Gemeinde!

Ich habe ein, für mich unlösbares Problem.
Benötige eine batch, die mir Dateinamen verkürzt.
Ein System von mir generiert ".ace-Dateien" immer mit dem gleichen Schema:

B=Buchstabe
Z=Zahl
H=Hexadezimale Stelle (halt Zahl oder Buchstabe)

BEISPIEL einer dieser Dateiennamen:

BBZZZZBBBBHHHHHHHHHHH.ace
oder
BBZZZZZBBBBHHHHHHHHHHH.ace
Das ist der Standartfall, mit den Dateien ist alles ok.

Nun kommt es vor, dass unter gewissen Umständen (systemseitig, kann nicht geändert werden) die Dateien so aussehen:
BBZZZZBBBBHHHHHHHHHHH- 1.ace
oder
BBZZZZZBBBBHHHHHHHHHHH- 1.ace

Diese Dateien müssen bisher händisch umbenannt werden, so dass der Teil "- 1" wegfällt. Der Rest muss so bleiben wie er ist.

Geht sowas automatisiert per batch?
Kann man Dateien ab einem bestimmten Zeichen verkürzen, in meinem Fall der Bindestrich?

Vielen Dank euch!

Schöne Grüße
der Stefan!

Content-Key: 185834

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

Printed on: April 19, 2024 at 21:04 o'clock

Member: pieh-ejdsch
pieh-ejdsch Jun 02, 2012 updated at 20:14:50 (UTC)
Goto Top
moin Stefan,

das wäre für "*-*.ace" Dateien ab was für einem Ordner?
Rekursiv in etwa so: ( @echo simuliert nur was es täte wenn es nicht mehr da steht)
for /r "D:\Ordner" %%i in (*-*.ace) do @for /f "delims=-" %%j in ("%%~ni" ) do @echo ren "%%~i" "%%~j%%~xi"  

Gruß Phil
Member: pi314
pi314 Jun 03, 2012 updated at 08:44:58 (UTC)
Goto Top
Falls es sich um Linux/Unix o. ä. handelt, hier ein Beispiel mit awk, so wird auf das Trennzeichen "-" reagiert und alles dahinter mit ".ace" ersetzt:

for datei in *-*ace
do
  mv $datei $(echo $datei | awk -v FS="-" '{print $1}').ace  
done


so long,
pi314
Mitglied: 106942
106942 Jun 03, 2012 at 09:36:08 (UTC)
Goto Top
Hey,

vielen Dank für die super schnelle Hilfeleistung!
Also es handelt sich nicht um Unix/Linux sondern um Windows.

Das Script von Phil klappt wunderbar!!!
Nur leider hatte ich einen kleinen Denkfehler und ein wichtiges Detail unterschlagen.
Kann man bei den Dateien mit "- 1" den vorhergehenden (nur Einen) HEX-Buchstaben durch ein "X" ersetzen?
Soll heißen, dass nach der Ausgabe nur noch 10 HEX-Werte dastehen gefolgt von einem "X" und dann .ace

Habe selbst schon am Quelltext ein bissl rumgespielt, nur leider verstehe ich nicht alle Argumente und Variablen, was es mir nicht ganz einfach macht, das selbst zu lösen...

Also das soll dann so aussehen:

Ursprungsdateien:

BBZZZZBBBBHHHHHHHHHHH- 1.ace
oder
BBZZZZZZBBBBHHHHHHHHHHH- 1.ace


gewünschte Ausgabe:

BBZZZZBBBBHHHHHHHHHHX.ace
oder
BBZZZZZZBBBBHHHHHHHHHHX.ace


Super vielen Dank euch!!!

Der Stefan
Member: Biber
Biber Jun 03, 2012 updated at 11:36:28 (UTC)
Goto Top
Moin steffchen112,

willkommen im Forum.

Ein auf die neue Anforderungserkenntnis angepasster pieh-ejdsch-Plus-Schnipsel könnte z.B. so aussehen:
-- AceUmbenamser.cmd
@echo off & setlocal enableDelayedExpansion
for /r "D:\Ordner" %%i in (*-*.ace) do (  
  for /f "delims=-" %%j in ("%%~ni" ) do (  
   Set "oldname=%%~nj"     
   echo ren "%%~fi" !oldname:~,-1!X%%~xi  
   )
)
-- wobei auch hier in der Zeile 06 erstmal das "ren" nur als "echo ren" simuliert wird.

Anmerkungen:
Großes Lob für die klare und übersichtliche Frageformulierung und die optische Aufbereitung. Vielen Dank.

Bitte beim nächsten Mal daran denken:
  • die Info "Ist für Windows oder ist für Linux" ist manchmal hier angebracht
  • "Batch" ist immer die Automatisierung wiederkehrender Abläufe nach bekannten Regeln. Wenn dir diese Regeln erst nach der ersten Prototyp-Fertigstellung so ganz vollständig einfallen: das kann im richtigen IT-Leben richtig teuer werden. Weil der beauftragte Coder ganz weit vorn neu anfangen muss und das bezahlt haben will.

Grüße
Biber
Member: pi314
pi314 Jun 03, 2012 at 11:36:31 (UTC)
Goto Top
Hm, Windows.. schade, aber man kann nicht alles haben face-smile

Aber mit cygwin funktioniert's auch unter Windows face-wink
Mitglied: 106942
106942 Jun 06, 2012 at 12:54:21 (UTC)
Goto Top
Hey Leute,

das script läuft super!!!

Vielen Dank dafür!!!

der Stefan!