kies-krieger
Goto Top

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!!!

Content-Key: 154292

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

Printed on: April 19, 2024 at 23:04 o'clock

Mitglied: 60730
60730 Nov 03, 2010, updated at Oct 18, 2012 at 16:43:58 (UTC)
Goto Top
moin,

versuch> das ganze den ganzen Thread mal zu kürzen...

hier gehts weiter
Member: bastla
bastla Nov 03, 2010 at 18:34:52 (UTC)
Goto Top
Hallo Kies-Krieger und willkommen im Forum, hallo T-Mo!

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
Vorteil: Ev schon bestehende Zieldateien werden durch "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"? face-wink
Member: Biber
Biber Nov 03, 2010 at 19:03:39 (UTC)
Goto Top
[OT] @bastla

Zitat von @bastla:
P.S.: Ist "Kies-Krieger" eigentlich ein Synonym für "Geldscheffler"? face-wink
Die Alternative "Moos-Sammler" wäre zu schwierig für meine Ex-Praktikantin Susi ..aka "Ssusi, ssag mal 'Ssalatssüsssl'... "
[/OT]
Member: Kies-Krieger
Kies-Krieger Nov 04, 2010 at 06:51:18 (UTC)
Goto Top
Hallo Timo,

danke für die prompte Antwort. Hatte gestern leider keine Zeit mehr selbst zu antworten. Deshalb gleich jetzt in aller Herrgottsfrüh!

Danke auch für die Erklärung von "more+1". Meine Daten stehen auch immer in der zweiten Zeile. Von daher wäre das more+1 ja auch ok, oder nicht?.

Leider funktioniert Dein Script nicht. Eine Fehlermeldung konnte ich nicht erkennen. Wie kann man das langsam abspielen? Ich habe leider keine Ahnung woran es liegen könnte. Evtl. daran dass noch mehr / in der Datei vorkommen? Dann macht das mit der zweiten Zeile schon Sinn.

Was bedeutet "token=2"?

Und woher weiß er bei Dir, dass er nach dem / anfangen soll und dann am Ende der Zeile aufhören soll?

Tut mir leid, wenn ich solche bescheuerten Fragen stelle, aber ich habe davin eben sehr wenig Ahnung.


Trotzdem Danke nochmal für die schnelle Hilfe...Ich probiere weiter....
Member: Kies-Krieger
Kies-Krieger Nov 04, 2010 at 06:58:34 (UTC)
Goto Top
Hallo Bastla,

auch Dir vielen Dank für die superschnelle Hilfe. Leider geht auch Dein Script nicht. Allerding bringt er Fehlermeldungen, die ich aber aufgrund der Geschwindigkeit nicht lesen kann. Wie kann ich das langsamer abspielen?

Und warum steht bei Dir hinter dem ersten (Zeile 05) "delims=" nichts?

Kies-Krieger ist der übliche Geschäftsname meiner Firma, bei der ich angestellt bin. Ich bin gerade dabei SAP bei uns im Bereich FI/CO einzuführen. Und beim einstellen des automatischen Kontoauszugs habe ich eben o. g. Probleme, weil SFirm die Daten nur fortlaufend nummeriert, wir aber zu viele Banken udn daher STA-Dateien haben, um pro Buchungskreis immer die richtige einzuspielen. Von daher wäre die Kontonummer im Dateiname sehr vorteilhaft.

Ob unsere Chefs damals auch daran dachten, dass es ein Synonym für "Geldscheffler" ist, kann ich mir gut vorstellen, bei der Kohle die hier fließt Du kannst ja mal kies-krieger.de eingeben, falls Du Baustoffe oder nen Schiffstransport aufm Rhein oder aufm Neckar benötigst

Also nochmal Danke auch Dir für die schnelle Hilfe.
Member: Kies-Krieger
Kies-Krieger Nov 04, 2010 at 07:02:16 (UTC)
Goto Top
Hallo Bastla,

habe es nochmals getestet und Dein echo entfernt. Jetzt benennt er die erste STA Datei im Verzeichnis um, aber nicht mit der Kontonummer sindern Dateiname ist nun einfach "i".

Vielleicht hilft Dir das weiter den Fehler evtl. doch noch zu finden.
Member: Kies-Krieger
Kies-Krieger Nov 04, 2010 at 07:16:18 (UTC)
Goto Top
Hallo Bastla,

habe den Fehler gefunden.

Aus "do if not defined Nr set "Nr=%i" " mache "do if not defined Nr set "Nr=%%i"

Dann gehts!

Vielen Tausend Dank!!!!!!!!


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?

Also z.B.

Kontonummer 123456 gehört zu Firmennummer 01
Kontonummer 987654 gehört zu Firmennummer 02
etc.

Aus 123456.sta wird dann 123456_01.sta oder noch besser 01_123456.sta

Müsste ich die Zuordnung Kontonummer zu Firmennummer am besten in einer extra txt-Datei führen oder wie glaubt ihr könnte man das realisieren?
Member: Kies-Krieger
Kies-Krieger Nov 04, 2010 at 07:29:05 (UTC)
Goto Top
Hallo Timo,

auch Dein Script geht wenn man bei "%~1" die Anführungszeichen weglässt.

Dein Move-Befehl ist mir fast sympatischer, weil ich damit die Datei doch auch verschieben kann oder nicht? Wenn ich in D:\STADaten ein "save" Verzeichnis erstelle (also D:\STADaten\save) Wie kann ich die Datei dann dort reinschieben?

Und wenn ich das mache dann benötige ich leider auch das Datum im Dateiname, weil er ja sonst täglich neu generierte STA-Dateien im save Verzeischnis überschreiben würde oder?

Tut mir leid wenn ich euch so trietze!! (Schreibt man das so?^^)
Member: Kies-Krieger
Kies-Krieger Nov 04, 2010 at 07:35:12 (UTC)
Goto Top
Hallo Timo,

habe das Datumsproblem mit eine "%date%" vor "%Nr%.%Typ%" gelöst. Ich fühl mich an 64er Zeiten erinnert...oh mann!!! Wie bekommt man einen Unterstrich zwischen Datum und Kontonummer? Ich probier weiter.

@admin
Sorry, wenn ich den Fred hier selbst vollspamme aber ich hab gerade nen "Retro-Programmier"-Lauf^^ Nicht böse sein!


edit:

Habe den Unterstrich!!! Für alle Anfänger denen es evtl. hilft: Mit "_" zwischen "%date%" und "%Nr%.%Typ%" also so: "%date%""_""%Nr%.%Typ%"

Jetzt nur noch das Buchungskreis und das save-Verzeichnisproblem....hrhrhrhr
Mitglied: 60730
60730 Nov 04, 2010 at 09:05:26 (UTC)
Goto Top
Moin,

au wei, das aber viel zum lesen.. ich fang von unten an...

  • Um Thema Batch Datum" gibts es ein "das" Tut vom Biber
An deiner Stelle würde ich überlegen, ob es nicht sinniger sein könnte, jeden Monat in einen eigenen Ordner zu schreiben

  • 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%.*"  
kennst du ja

Kontonummer 123456 gehört zu Firmennummer 01
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 face-sad
und ungetestet aus dem Bauch ist es auch.

gruß
Member: Kies-Krieger
Kies-Krieger Nov 04, 2010 at 09:28:44 (UTC)
Goto Top
Hallo Timo,

danke für die Hilfe. Habe gerade Kaffee nachgeschöpft *zuprost*:

So: Wenn ich das richtig verstehe muss ich einfach unter die Zeile 11 Deine Zeilen 11a, 11b etc. einfügen, nicht wahr.

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 verschieben nicht face-sad

Meine STA-Datei sieht zu Beginn so aus:
:20:STARTUMSE
:25:62050000/0009502509
:28C:00000/001

Meine umbenannte Datei sieht dann so aus: 04.11.2010_0009502509.sta

Nebenbei: Gibt es auch das Datumsformat YYYYMMDD ?? Gerne auch mit Punkten also YYYY.MM.DD ? Wenns ne Riesensache ist gehts auch ohne.
Member: Biber
Biber Nov 04, 2010 at 10:10:36 (UTC)
Goto Top
[OT]

Zitat von @Kies-Krieger:
Umbenennen tut er die Datei. Aber verscheiben nicht face-sad

.. 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]
Mitglied: 60730
60730 Nov 04, 2010 at 10:24:59 (UTC)
Goto Top
Salü,

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 face-sad ist ja auch kein zugelassenes Arztscript *scnr*

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%"  

@ SchraubenmeisterBiber:
Scheibenkleister face-wink
Member: Kies-Krieger
Kies-Krieger Nov 04, 2010 at 10:26:46 (UTC)
Goto Top
verscheiben in verschieben geändert.
Geht immernoch nicht ^^

Es grüßt der Kies-Krieger
Member: Kies-Krieger
Kies-Krieger Nov 04, 2010 at 11:00:14 (UTC)
Goto Top
Deine Änderung von move %1 "Firma1\%Nr%.*" in move %1 "Firma1\%date%_%Nr%.%typ%" hatte ich auch schon geändert. Allerdings geht es dennoch nicht. Ich weiß nicht warum. Da Du auch schreibst: Erst umbenennen und dann verschieben, gehe ich davon aus dass Du es wirklich so meinst, dass ich die Zeilen untereinander platziere.

Habe jetzt einfach mal Deine Zeile so reinkopiert - geht dennoch nicht. *grübel*

: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\%date%_%Nr%.%typ%"
goto :eof
Mitglied: 60730
60730 Nov 04, 2010 at 11:43:47 (UTC)
Goto Top
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:
if defined Nr ren %1 "%date%""_""%Nr%.%typ%"  
if defined Nr if "%Nr"=="0009502509" move "%date%""_""%Nr%.%typ%" "Firma1\%date%_%Nr%.%typ%"  
Das einzigste was daran schöner aussieht, sind die Codeblöcke - die du auch ignorierst

Gruß
Member: Kies-Krieger
Kies-Krieger Nov 04, 2010 at 12:02:07 (UTC)
Goto Top
Tut mir leid, wenn ich Dich so nerve!

Habe natürlich auch den Fall ausprobiert, dass ich die Zeile mit dem ren entferne und nur Deine Zeile nehme. Gleich zu Beginn. Udn das hatte nicht funktioniert. Deshalb kam ich irgendwann auf die Idee, dass Du es doch so meinen könntest, dass man die ren Zeile drin lassen muss. Deshalb auch noch einmal mein Nachfragen. Tut mir leid, wenn ichs nicht gleich verstanden habe.

Dann habe ich versucht den Fehler in Deiner Zeile zu finden. Aber leider auch ohne Erfolg bisher. Nach "Batch Dateidatum" habe ich hier ebenfalls versucht zu suchen. Auch ohne Erfolg weil er seit ner halben Stunde schreibt, dass das System gerade ausgelastet sei.

Und dass ich die Codeblöcke ignoriere stimmt nicht. Ich wusste nur nicht wie es geht. Aber bei all meinen Fragen habe ich ausnahmsweise mal diese nach den Codeblöcken nicht auch noch gestellt. Auch hierfür bitte ich um Entschuldigung. Das nächste mal stelle ich noch mehr Fragen.

Ich versuche weiter den Fehler zu finden. Danke für die Hilfe bis hierhin!

Gruß
Member: Biber
Biber Nov 04, 2010 at 12:28:07 (UTC)
Goto Top
Moin Kies-Sieber,

Zitat von @Kies-Krieger:
Tut mir leid, wenn ich Dich so nerve!
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
Member: Kies-Krieger
Kies-Krieger Nov 04, 2010 at 12:40:54 (UTC)
Goto Top
@Biber:
Merci! - Deine Tips werden ab sofort umgesetzt!
Mitglied: 60730
60730 Nov 04, 2010 at 12:43:51 (UTC)
Goto Top
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³]
Member: Kies-Krieger
Kies-Krieger Nov 04, 2010 at 13:13:00 (UTC)
Goto Top
OK Ich versuche mal das ganze nicht noch schlimmer zu machen und schreibe Dir, was ich habe:

Meine Batch-Datei sieht so aus:
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 ren %1 "%date%""_""%Nr%.%typ%"    
goto :eof

Meine STA-Datei sieht so aus:
:20:STARTUMSE
:25:62050000/0009502509
:28C:00000/001

Wenn ich das Script nun laufen lasse, dann benennt er die STA-Datei korrekt um!

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
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?
Mitglied: 60730
60730 Nov 04, 2010 at 13:25:40 (UTC)
Goto Top
vergess das mit den klammern um die Schleife, liegt am schlechten Kaffee....

Zitat von @Kies-Krieger:
OK Ich versuche mal das ganze nicht noch schlimmer zu machen und schreibe Dir, was ich habe:
face-wink
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
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
Member: Kies-Krieger
Kies-Krieger Nov 04, 2010 at 13:25:59 (UTC)
Goto Top
@Timo:

Habe Dein Script erfolgreich getestet! Jetzt müsste es nur so sein, dass er die Kontonummer nimmt statt die Bankleitzahl. Bin am testen, aber wahrscheinlich hast Du es eher als ich.

Gruß
Member: Kies-Krieger
Kies-Krieger Nov 04, 2010 at 13:34:19 (UTC)
Goto Top
@Timo:

Die Sonne geht auf und ich kann Gott sehen!

DANKE!!!

Es funktioniert! Es funktioniert! ET telefoniern nach Haus!!!!!!!!!!!
Mitglied: 60730
60730 Nov 04, 2010 at 13:37:14 (UTC)
Goto Top
Zitat von @Kies-Krieger:
@Timo:

Die Sonne geht auf und ich kann Gott sehen!

DANKE!!!

Es funktioniert! Es funktioniert! ET telefoniern nach Haus!!!!!!!!!!!

Dann bitte dem Fred den How can I mark a post as solved? anreichen face-wink