dol123
Goto Top

Batch - Dateiname aus Datei auslesen

Hallo,

hab einen Ordner in den täglich mehrere Dateien mit fortlaufender Nummer geschrieben werden.
Bei allen Dateien steht in der zweiten Zeile eine Kontonummer (10 stellig, mit führenden Nullen) mit #EUR angehängt; Beispiel: 0000123456#EUR.

Nun würde ich per Batch gerne die Datei umbenennen, so das die Kontonummer als Dateiname verwendet wird. Ob mit oder ohne dem #EUR ist mir eigentlich egal - schöner wäre zwar ohne - muss aber nicht sein.
Beispiel: aus STA0781.STA sollte 0000123456.STA oder 0000123456#EUR.STA werden.

Bei den Dateien handelt es sich um .STA Dateien - diese kann ich mit dem Editor jedoch problemlos öffnen und bearbeiten.

Hab zu dem Thema bereits einige Beiträge gefunden. Habs leider nicht geschafft eine der dort genannten Lösungen für meine Bedürfnisse umzubauen.


Danke an alle die Antworten!

Content-Key: 61742

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

Ausgedruckt am: 29.03.2024 um 01:03 Uhr

Mitglied: bastla
bastla 19.06.2007 um 11:43:20 Uhr
Goto Top
Hallo dol123 und willkommen im Forum!

Versuch es mit folgender Batchdatei ("Umbenennen.bat"):
@echo off & setlocal
set Nr=
for /f "delims=#" %%i in ('more +1 "%~1"') do if not defined Nr set Nr=%%i  
if defined Nr if not exist "%~dp1%Nr%%~x1" ren "%~1" "%Nr%%~x1"  
Beim Aufruf ist die umzubenennende Datei als Argument zu übergeben (auch per Drag and Drop aus dem Explorer möglich), also etwa
Umbenennen.bat STA0781.STA

Falls eine Datei mit dem neuen Namen bereits existiert, wird nicht umbenannt. Was sollte in diesem Fall in einer Endfassung passieren?

Grüße
bastla

[Edit] Berücksichtigung von Pfaden ergänzt [/Edit]
Mitglied: dol123
dol123 19.06.2007 um 12:00:52 Uhr
Goto Top
Danke für die sehr schnelle und hilfreiche Antwort!!

Die Batch funktioniert so weit fehlerfrei. Perfekt wäre es wenn:

- evtl. vorhandene Dateien einfach überschrieben würden.
- der Dateiname nicht beim Aufruf mit übergeben werden müsste, sondern alle Dateien in diesem Ordner nacheinander abgearbeitet werden.


Nochmals Danke für die Hilfe !
Mitglied: bastla
bastla 19.06.2007 um 12:13:40 Uhr
Goto Top
Hallo dol123!

Vielleicht so:
@echo off & setlocal
set "Ordner=D:\STADaten"  
set "Typ=sta"  
cd /d "%Ordner%"  
for %%f in (*.%Typ%) do call :ProcessFile "%%f"  
goto :eof
:ProcessFile
set Nr=
for /f "delims=#" %%i in ('more +1 "%~1"') do if not defined Nr set Nr=%%i  
if defined Nr move /y "%~1" "%Nr%.%Typ%"  

Grüße
bastla
Mitglied: dol123
dol123 19.06.2007 um 12:32:33 Uhr
Goto Top
Erster Test erfolgreich.

Ein großes DANKE für die schnelle Hilfe !!