steffchen 10 Geschrieben 31. Mai 2012 Melden Teilen Geschrieben 31. Mai 2012 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! Zitieren Link zu diesem Kommentar
Vainac 10 Geschrieben 31. Mai 2012 Melden Teilen Geschrieben 31. Mai 2012 Moin, ja das geht bestimmt :-D Aber erstmal zur Theorie, ist der Aufbau "- 1" immer gleich oder kann auch anderes dort stehen? Gruß Vainac Zitieren Link zu diesem Kommentar
steffchen 10 Geschrieben 31. Mai 2012 Autor Melden Teilen Geschrieben 31. Mai 2012 :-) Hey Vainac, was das System generiert ist wenn dann immer "- 1". Aber halt nicht immer. Von tausend Dateien vielleicht 30x. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 31. Mai 2012 Melden Teilen Geschrieben 31. Mai 2012 Powershell: [...] replace('- 1','') [...] alternativ: [...] indexof('-') [...] substring() [...] Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 31. Mai 2012 Melden Teilen Geschrieben 31. Mai 2012 Moin, per Batch ginge sowas vermutlich mit FOR, erfordert aber ein wenig Gebastel. PowerShell oder VBS wäre wahrscheinlich einfacher zu handhaben. Gruß, Nils Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 31. Mai 2012 Melden Teilen Geschrieben 31. Mai 2012 (bearbeitet) 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(... bearbeitet 31. Mai 2012 von Dukel Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 31. Mai 2012 Melden Teilen Geschrieben 31. Mai 2012 (bearbeitet) 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. bearbeitet 31. Mai 2012 von lefg Zitieren Link zu diesem Kommentar
steffchen 10 Geschrieben 31. Mai 2012 Autor Melden Teilen Geschrieben 31. Mai 2012 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. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 31. Mai 2012 Melden Teilen Geschrieben 31. Mai 2012 Hast du Rechte in dem Ordner mit dem User, mit dem du das Script aufrufst? Zitieren Link zu diesem Kommentar
steffchen 10 Geschrieben 31. Mai 2012 Autor Melden Teilen Geschrieben 31. Mai 2012 ja Rechte habe ich Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 31. Mai 2012 Melden Teilen Geschrieben 31. Mai 2012 Ahhh. Mein Fehler. Cmdlets verwechselt. Statt get-childitem habe ich get-content geschrieben. Ändere es grad mal oben ab. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.