Jump to content

Dateinamen per Batch kürzen?


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Recommended Posts

Hallo MCSEboard-Gemeinde!

 

Es ist mal wieder soweit, 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!

Link to comment

Hier gibts gleich mal ein komplettes Code Schnippselchen (ungetestet):

 

$root = "D:\Daten"
foreach($file in (get-childitem $root)){
  if($file.Name -match '-'){
     move-item $file.FullName $file.FullName.replace('- 1','')
     # alternativ folgendes:
     # move-item $file.FullName ($file.FullName[0..($file.FullName.indexof('-')-1)] -join '')+".ace"
     # noch ne alternative:
     # move-item $file.FullName ($file.FullName.substring(0,$file.FullName.indexof('-')))+".ace"
     # Wenn ich schon dabei bin um es komplett dynamisch zu machen:
     # move-item $file.FullName $file.FullName.substring(0,$file.FullName.indexof('-'))+$file.FullName.substring($file.FullName.lastindexof('.'))
  }
}

 

Achtung! Bei minus im Ordner muss man das obige noch etwas umschreiben.

$file.path+$file.name(...

Edited by Dukel
Link to comment

Mit cmd und einer Batch gibt das keine schöne Lösung.

 

Wie Nils schrieb, es müsste die FOR-Schleife benutzt werden, dann darin das Verzeichnis mir DIR gelesen in eine Variable, eine weitere für den geänderten Dateinamen mit set erzeugt und dann umbenant. Es geht, ist aber nicht schön, nicht effektiv.

 

PS ist shöner und effektiver.

Edited by lefg
Link to comment

Habe das script gerade getestet (meinen Pfad natürlich angepasst) und dann kam folgendes bei rum:

 

Get-Content : Access to the path 'C:\shell\test' is denied.

Bei c:\shell\script.ps1:2 Zeichen:30

+ foreach($file in (get-content <<<< $root)){

 

Da ich mich mit PS überhaupt gar nicht auskenne, hoffe ich, dass mir jemand weiterhelfen kann... ich kann nur sagen, dass Dateisystem-Zugriffrechte auf dieses Verzeichnis vorhanden sind.

Link to comment
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...