STA Dateien umbenennen
Hallo Leute,
ich habe zum einen ein Programmierproblem und zum anderen wenig bis gar keine Programmierkenntnisse. Ich hoffe dennoch, dass mir hier geholfen werden kann. Es gibt bereits einen geschlossenen Fred Batch - Dateiname aus Datei auslesen , der genau schildert, welches Problem ich habe. Nur dass meine STA-Datei anders aussieht.
Zum Problem genau:
Ich möchte aus einer STA-Datei eine zehnstellige Ziffer (=Kontonummer) auslesen und diese dann als Dateiname verwenden. So sieht meine STA-Datei aus:
:20:STARTUMS
:25:66391600/10518202
:28C:0
...
Die Kontonummer lautet in diesem Fall "10518202" und meine zukünftige STA-Datei soll also 10518202.sta heißen.
Anders als im o.g. Fred habe ich kein "#EUR" in meiner STA-Datei stehen. Deshalb funktioniert auch der dort als Lösung angegebene Code nicht, der wie folgt aussieht:
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%"
In meinem Fall müsste man sich nach den Zeichen :25: suchen, da hier die Zeile immer eindeutig defniniert ist. Außerdem ist die folgende BLZ natürlich immer 8-stellig und die Kontonummer immer duch einen / von der BLZ getrennt.
Wie gesagt - Ich kenne mich nicht aus. Es wäre nett, wenn jemand mir den Code derart abändern könnte, dass die Kontonummer als Dateiname ersetzt wird. Tausend Dank schon mal im voraus!!!
ich habe zum einen ein Programmierproblem und zum anderen wenig bis gar keine Programmierkenntnisse. Ich hoffe dennoch, dass mir hier geholfen werden kann. Es gibt bereits einen geschlossenen Fred Batch - Dateiname aus Datei auslesen , der genau schildert, welches Problem ich habe. Nur dass meine STA-Datei anders aussieht.
Zum Problem genau:
Ich möchte aus einer STA-Datei eine zehnstellige Ziffer (=Kontonummer) auslesen und diese dann als Dateiname verwenden. So sieht meine STA-Datei aus:
:20:STARTUMS
:25:66391600/10518202
:28C:0
...
Die Kontonummer lautet in diesem Fall "10518202" und meine zukünftige STA-Datei soll also 10518202.sta heißen.
Anders als im o.g. Fred habe ich kein "#EUR" in meiner STA-Datei stehen. Deshalb funktioniert auch der dort als Lösung angegebene Code nicht, der wie folgt aussieht:
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%"
In meinem Fall müsste man sich nach den Zeichen :25: suchen, da hier die Zeile immer eindeutig defniniert ist. Außerdem ist die folgende BLZ natürlich immer 8-stellig und die Kontonummer immer duch einen / von der BLZ getrennt.
Wie gesagt - Ich kenne mich nicht aus. Es wäre nett, wenn jemand mir den Code derart abändern könnte, dass die Kontonummer als Dateiname ersetzt wird. Tausend Dank schon mal im voraus!!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 154292
Url: https://administrator.de/forum/sta-dateien-umbenennen-154292.html
Ausgedruckt am: 18.05.2025 um 01:05 Uhr
25 Kommentare
Neuester Kommentar

Hallo Kies-Krieger und willkommen im Forum, hallo T-Mo!
Eine kleine Variation des Ansatzes (aber genauso ungetestet) könnte so aussehen:
Vorteil: Ev schon bestehende Zieldateien werden durch "
Grüße
bastla
P.S.: Ist "Kies-Krieger" eigentlich ein Synonym für "Geldscheffler"?
Eine kleine Variation des Ansatzes (aber genauso ungetestet) könnte so aussehen:
set "Ordner=D:\STADaten"
set "Typ=sta"
pushd "%Ordner%"
for /f "delims=" %%f in ('dir /b /a-d *.%Typ% 2^>nul') do call :ProcessFile "%%f"
goto :eof
:ProcessFile
set Nr=
for /f "tokens=2 delims=/" %%i in ('findstr ":25:" %~1') do if not defined Nr set "Nr=%i"
if defined Nr echo ren %1 "%Nr%.*"
goto :eof
ren
" nicht überschrieben (was ein "move
" auch ganz ohne "/y
" machen würde) ...Grüße
bastla
P.S.: Ist "Kies-Krieger" eigentlich ein Synonym für "Geldscheffler"?

Moin,
au wei, das aber viel zum lesen.. ich fang von unten an...
Es ist nicht "mein" Script und mein Move, die Ehre gebührt Bastla - ich hab das nur adoptiert, weil es grad so nett dastand.
(ich vermute anhand ) do call :ProcessFile das wir über ein Bastlascript sprechen.
Wenn du Bastlas Weg nehmen würdest evtl. so:
kennst du ja
So würde er (wenn es einen Ordner Firma1/2 gäbe) die Dateien hübsch in deren Ordner verstecken.
das könnte man zwar auch netter über eine If Else schreiben, aber mein Kaffee ist alle
und ungetestet aus dem Bauch ist es auch.
gruß
au wei, das aber viel zum lesen.. ich fang von unten an...
- Um Thema Batch Datum" gibts es ein "das" Tut vom Biber
- jahr\monat\tag-kontonummer.sta
Es ist nicht "mein" Script und mein Move, die Ehre gebührt Bastla - ich hab das nur adoptiert, weil es grad so nett dastand.
(ich vermute anhand ) do call :ProcessFile das wir über ein Bastlascript sprechen.
Was bedeutet "token=2"?
gib mal for /? in die Dosbox ein - den zweiten "schlüssel" nehmen -die delims bestimmen den Trenner, ab wann der zweite Schlüssel gilt.Und woher weiß er bei Dir, dass er nach dem / anfangen soll und dann am Ende der Zeile aufhören soll?
- delims=/
- for ist zeilenbasiert
Da jede meiner Kontonummern zu einer ganz bestimmten Firma gehört, die wir verwalten wäre es wünschenswert, wenn er im Dateiname jetzt auch noch die Firmennummer haben könnte. Eben nach einer festen Zuordnung. Wie könnte man das machen?
Wenn du Bastlas Weg nehmen würdest evtl. so:
11. if defined Nr echo ren %1 "%Nr%.*"
Kontonummer 123456 gehört zu Firmennummer 01
Kontonummer 987654 gehört zu Firmennummer 02
Kontonummer 987654 gehört zu Firmennummer 02
11a. if defined Nr if "%Nr"=="123456" echo move %1 "Firma1\%Nr%.*"
11b. if defined Nr if "%Nr"=="987654" echo move %1 "Firma2\%Nr%.*"
So würde er (wenn es einen Ordner Firma1/2 gäbe) die Dateien hübsch in deren Ordner verstecken.
das könnte man zwar auch netter über eine If Else schreiben, aber mein Kaffee ist alle
und ungetestet aus dem Bauch ist es auch.
gruß
[OT]
.. und wenn schon mal jemand in der Lage ist, das Wort "umbenennen" richtig zu schreiben, dann ist es eim heimlicher Verscheiber... *seufz*
Grüße Biber
[/OT]
.. und wenn schon mal jemand in der Lage ist, das Wort "umbenennen" richtig zu schreiben, dann ist es eim heimlicher Verscheiber... *seufz*
Grüße Biber
[/OT]

Salü,
Dass lass uns das mal aufdröseln....
Ergo?
yupp - schau mal nach Bibers Tut - Batch Dateidatum
@SchraubenmeisterBiber:
Scheibenkleister
Zitat von @Kies-Krieger:
Habe das jetzt so:
:ProcessFile
set Nr=
for /f "tokens=2 delims=/" %%i in ('findstr ":25:" %~1') do if not defined Nr set Nr=%%i
if defined Nr ren %1 "%date%""_""%Nr%.%typ%"
if defined Nr if "%Nr"=="0009502509" move %1 "Firma1\%Nr%.*"
goto :eof
Umbenennen tut er die Datei. Aber verschreiben nicht
ist ja auch kein zugelassenes Arztscript *scnr*
Habe das jetzt so:
:ProcessFile
set Nr=
for /f "tokens=2 delims=/" %%i in ('findstr ":25:" %~1') do if not defined Nr set Nr=%%i
if defined Nr ren %1 "%date%""_""%Nr%.%typ%"
if defined Nr if "%Nr"=="0009502509" move %1 "Firma1\%Nr%.*"
goto :eof
Umbenennen tut er die Datei. Aber verschreiben nicht
Dass lass uns das mal aufdröseln....
- Alle Treffer landen als %1 in der call Schleife...
- und die Treffer werden zuerst via ren umbenamst
- jetzt heist Treffer nicht mehr "Treffer" - oder das was mit %1 übergeben wurde sondern...
Ergo?
if defined Nr if "%Nr"=="0009502509" move %1 "Firma1\%date%_%Nr%.%typ%"
Nebenbei: Gibt es auch das Datumsformat YYYYMMDD
yupp - schau mal nach Bibers Tut - Batch Dateidatum
if defined Nr if "%Nr"=="0009502509" move %1 "Firma1\%date:~-4%.%date:~-7,2%.%date:~-10,2%_%Nr%.%typ%"
@
Scheibenkleister

moin,
lese das doch bitte genau - du hattest eine erweiterung und die lief nicht - ich hab dir das aufgemalt warum es so sein muß - das die erweiterung nicht lief....
if defined Nr ren %1 "%date%""_""%Nr%.%typ%"
benennt die Datei doch um - nach dieser Zeile ist die Datei nicht mehr unter Ihrem alten Namen vorhanden ....
Ergo - ich habe aus deinen zwei Zeilen eine gemacht.
if defined Nr if "%Nr"=="0009502509" move %1 "Firma1\%date:~-4%.%date:~-7,2%.%date:~-10,2%_%Nr%.%typ%"
sieht hybscher aus, als:
Das einzigste was daran schöner aussieht, sind die Codeblöcke - die du auch ignorierst
Gruß
lese das doch bitte genau - du hattest eine erweiterung und die lief nicht - ich hab dir das aufgemalt warum es so sein muß - das die erweiterung nicht lief....
if defined Nr ren %1 "%date%""_""%Nr%.%typ%"
benennt die Datei doch um - nach dieser Zeile ist die Datei nicht mehr unter Ihrem alten Namen vorhanden ....
Ergo - ich habe aus deinen zwei Zeilen eine gemacht.
if defined Nr if "%Nr"=="0009502509" move %1 "Firma1\%date:~-4%.%date:~-7,2%.%date:~-10,2%_%Nr%.%typ%"
sieht hybscher aus, als:
if defined Nr ren %1 "%date%""_""%Nr%.%typ%"
if defined Nr if "%Nr"=="0009502509" move "%date%""_""%Nr%.%typ%" "Firma1\%date%_%Nr%.%typ%"
Gruß
Moin Kies-Sieber,
Mach dir keine Sorgen - noch ist T-Mo gar nicht genervt.
Für seine Verhältnisse ist er noch in der devoten Phase.
Bleib also auch du relaxed - wir kommen ja der Sache immer näher.
2 Tipps von mir:
Grüße
Biber
Mach dir keine Sorgen - noch ist T-Mo gar nicht genervt.
Für seine Verhältnisse ist er noch in der devoten Phase.
Bleib also auch du relaxed - wir kommen ja der Sache immer näher.
2 Tipps von mir:
- Die "Codeformatierung" ist nun nichts so Aufregendes - einfach den Code in "< code > " und "</ code >" -Tags setzen.[jeweils ohne Leerzeichen in den Tags]. Details siehe in unseren FAQ unter "Formatierungshilfen".
- Die von T-Mo angedeuteten Tutorials findest du, wenn du auf mein Profil klickst. Da sind die "Workshop Batch for Runaways"-Tuts sichtbar.
Grüße
Biber

Moin,
jetzt hab ich mal grob getestet
edit:
das einzig ärgerliche ist - das ich dachte : aah das Script sieht nach bastla aus, datt läuft und nicht genauer hingesehen habe und u.a deswegen das Frage und Antwortspielchen hier viel zu lang für das Problem wurde.
/edit
edit²
getestet - nur ohne zu wissen - ob Konto & Firma so passen
[edit³] passten nicht - daher kurz und schmerzlos...[/edit³]
jetzt hab ich mal grob getestet
edit:
das einzig ärgerliche ist - das ich dachte : aah das Script sieht nach bastla aus, datt läuft und nicht genauer hingesehen habe und u.a deswegen das Frage und Antwortspielchen hier viel zu lang für das Problem wurde.
/edit
edit²
getestet - nur ohne zu wissen - ob Konto & Firma so passen
[edit³] passten nicht - daher kurz und schmerzlos...[/edit³]

vergess das mit den klammern um die Schleife, liegt am schlechten Kaffee....

Gruß
zusammen:
Zitat von @Kies-Krieger:
OK Ich versuche mal das ganze nicht noch schlimmer zu machen und schreibe Dir, was ich habe:
OK Ich versuche mal das ganze nicht noch schlimmer zu machen und schreibe Dir, was ich habe:
Die Daten in Zeile :25: der STA-Datei bedeuten:
:25:Bankleitzahl/Kontonummer
Eine zusätzliche Anforderung sollte nun sein, dass er die Kontonummer erkennt und dann die STA-Datei in ein bestimmtes Verzeichnis verschiebt.
Wie muss ich jetzt die Zeile
:25:Bankleitzahl/Kontonummer
Eine zusätzliche Anforderung sollte nun sein, dass er die Kontonummer erkennt und dann die STA-Datei in ein bestimmtes Verzeichnis verschiebt.
Wie muss ich jetzt die Zeile
if defined Nr ren %1 "%date%""_""%Nr%.%typ%"
abändern, damit hier die Prüfung auf die Kontonummer erfolgt und anschließend die Datei in ein bestimmtes Verzeichnis verschoben wird?
- Angenommen Konto 0009502509 gehört zu Firma1 und der Unterordner Firma1 existiert, dann
if defined Nr if "%Nr%"=="0009502509" move %1 "firma1\%date%""_""%Nr%.%typ%"
Gruß
zusammen:
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 "tokens=2 delims=/" %%i in ('findstr ":25:" %1') do (
if not defined Nr set Nr=%%i
if defined Nr if "%%i"=="0009502509" move %1 "Firma1\%date:~-4%.%date:~-7,2%.%date:~-10,2%_%%i.%typ%"
if defined Nr if "%%i"=="0009502508" move %1 "Firma2\%date:~-4%.%date:~-7,2%.%date:~-10,2%_%%i.%typ%"
)
goto :eof

Zitat von @Kies-Krieger:
@Timo:
Die Sonne geht auf und ich kann Gott sehen!
DANKE!!!
Es funktioniert! Es funktioniert! ET telefoniern nach Haus!!!!!!!!!!!
@Timo:
Die Sonne geht auf und ich kann Gott sehen!
DANKE!!!
Es funktioniert! Es funktioniert! ET telefoniern nach Haus!!!!!!!!!!!
Dann bitte dem Fred den Wie kann ich einen Beitrag als gelöst markieren? anreichen