dralcome
Goto Top

Zeichen und Zeichenkette aus Dateinamen automatisch entfernen

Ich habe monatlich einen Haufen Auswertungen die ich in ein Programm importieren muss, dazu muss der Dateiname immer gleich sein. Die Auswertungen kommen automatisch, haben aber immer eine variierende Zeichenkette im Namen drin.

Ahoi zusammen!

Wie im Vorwort erwähnt, muss ich Daten von Programm A nach Programm B importieren. Programm B will die Dateinamen immer nach einem vorgegebenem Schema haben, Programm A exportiert die Daten aber immer mit Unterstrichen und variierenden Zeichenketten im Dateinamen.

Programm B will haben:
ABC-123-01 Erstes Sachgebiet - Abfrage 1.xml
ABC-123-02 Erstes Sachgebiet - Abfrage 25.xml

Programm A liefert:
ABC-123-01_Erstes_Sachgebiet_-_Abfrage_1.de-Tagesdatum-SessionID.xml
ABC-123-02_Erstes_Sachgebiet_-_Abfrage_25.de-Tagesdatum-SessionID.xml

In diesem Thread hier bin ich teilweise fündig geworden:
Per Batch oder VBS Zeichen aus Dateinamen ersetzen

Die Unterstriche im Dateinamen konnte ich mit Hilfe dieses Scripts in Leerzeichen umwandeln, das hat schonmal gepasst. Nur die Zeichenkette ab dem Punkt ".de" bis zur Dateiendung müsste ich jetzt noch rauswerfen. Ich hätte ja, genau wie beim Unterstrich, die Zeichenkette durch "" ersetzen lassen können, da diese aber immer Variabel ist, kann ich das so im Script nicht mit angeben.

Vielleicht hat jemand einen Tipp wie ich das da raus kriege?

Content-ID: 190615

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

Ausgedruckt am: 25.11.2024 um 01:11 Uhr

bastla
bastla 03.09.2012, aktualisiert am 04.09.2012 um 19:52:39 Uhr
Goto Top
Hallo DrAlcome!

Soferne "Erstes Sachgebiet" immer aus zwei Wörtern besteht, ließe sich da mit einem Batch etwa so machen:
for /f "delims=" %%i in ('dir /b "D:\Deine Dateien\ABC-*_*.xml"') do for /f "tokens=1-6 delims=_." %%a in ("%%~ni") do echo ren "D:\Deine Dateien\%%i" "%%a %%b %%c %%d %%e %%f%%~xi"
Das "echo" ist dazu da, die Umbenennung durch Anzeige des Befehles nur zu simulieren - wenn Du es weg lässt, werden die Namen tatsächlich geändert.

Grüße
bastla

[Edit] Fehlenden ' nachgetragen [/Edit]
pieh-ejdsch
pieh-ejdsch 03.09.2012 um 21:47:28 Uhr
Goto Top
moin,

und als Variante in etwa so:
setlocal disabledelayedexpansion
for %%i in ("D:\Deine Dateien\ABC-*_*.xml") do (  
  set "Name=%%~ni"  
  setlocal enabledelayedexpansion
  for %%a in ("!Name:_= !" ) do (endlocal  
    @echo ren "%%~i" "%%~na%%~xi"  
) )

Gruß Phil
DrAlcome
DrAlcome 04.09.2012 um 09:42:27 Uhr
Goto Top
Hallo,

schonmal Danke für eure Hilfe!
Mit der Variante von pieh-ejdsch funktioniert es soweit, allerdings habe ich mich oben verschrieben, im Dateinamen kommt nämlich nicht ".de" sondern "-de" vor.
Das "-de" bleibt jetzt immer noch im Namen stehen. Wenn ich das noch raus kriege bin ich wunschlos glücklich face-wink

Ich habe schon mit ein Paar Variationen hin und her gespielt, kriege es aber nicht raus.
Alternativ könnte ich mit dem VBS-Script aus dem anderen Thread (oben erwähnt) das "-de" durch "" ersetzen lassen, allerdings wäre es wesentlich eleganter das direkt in dem Batch-Script mit zu übergeben.
bastla
bastla 04.09.2012 um 12:10:01 Uhr
Goto Top
Hallo DrAlcome!

Bei meiner Version sollte eigentlich das "de" auch bei einem Trennzeichen "_" verschwunden sein ...

Grüße
bastla
DrAlcome
DrAlcome 04.09.2012 um 13:24:14 Uhr
Goto Top
Hi Bastla,

wenn ich dein Script benutze, tut sich gar nichts...?!
Ich habe den "Deine Dateien"-Pfad natürlich abgeändert, aber er schreibt mir dann in der Kommandozeile einfach nur den Befehl raus, ändert aber nichts an der Datei.

Das Trennzeichen bei "de" ist ja auch ein "-" und kein "_", bzw. auch kein "." wie ich ursprünglich geschrieben hatte.
bastla
bastla 04.09.2012 um 18:46:14 Uhr
Goto Top
Hallo DrAlcome!

Sorry - dass es ein "-" ist, hatte ich nicht erkannt face-sad - dafür hast Du aber, wie es aussieht, den Absatz unterhalb meines Code-Ansatzes übersehen face-wink ...

Grüße
bastla
bastla
bastla 04.09.2012 um 19:58:31 Uhr
Goto Top
... aber wie auch immer - soferne mit "-de" eine verlässliche Position für das Aufteilen der Namen vorliegt, könntest Du es so versuchen:
@echo off & setlocal
set "Trenn=-de"  

pushd "D:\Deine Dateien"  
for /f "delims=" %%i in ('dir /b "ABC-*_*.xml"') do call :ProcessFile "%%i"  
goto :eof

:ProcessFile
set "Name=%~n1"  
set "Name=%Name:_= %"  
call set "Ent=%%Name:*%Trenn%=%%"  
call set "NameNeu=%%Name:%Trenn%%Ent%=%%%~x1"  
echo ren %1 "%NameNeu%"  
goto :eof
- und ja, das "echo" hat noch immer den gleichen Zweck ... face-wink

Grüße
bastla
DrAlcome
DrAlcome 11.09.2012 um 11:56:40 Uhr
Goto Top
Hi Bastla,

sorry für die späte Rückmeldung, ich hatte letzte Woche leider keine Zeit mehr es zu testen da mein Kollege krank ist.
Ich werde es auf jeden Fall diese Woche noch ausprobieren und mich dann nochmal melden!
DrAlcome
DrAlcome 11.09.2012 aktualisiert um 15:28:45 Uhr
Goto Top
So, jetzt konnte ich es mal testen, und siehe da... es tut genau das was ich die ganze Zeit wollte! face-big-smile
Vielen Dank, Bastla (und natürlich auch pieh-ejdsch)! face-smile

Jetzt werde ich das Ganze noch so umbauen, dass es mir die Dateien direkt in den Ordner verschiebt, in dem sie für den Datenimport benötigt werden, aber das kriege ich noch alleine hin face-wink

P.S.: Achja, das mit dem Echo hatte ich schon richtig verstanden, es hatte aber trotzdem nix gemacht... face-confused