dax4fun
Goto Top

RECHNUNGS ABFRAGE PER BATCH (ORDNER STRUKTUR)

Hi Leute

habe das Problem das Daten zur Abrechung in Ordnern per Datum sortiert sind und sie in Txt Dateien Stehen.

Bsp: Im ORDNER "20131214" befindet sich "555123EOD...20131214.txt" wo drin steht "ID555123 EINGANG:207 AUSGANG:109 ANZAHL:112"

Wie kann ich eine "Batch Abfrage" basteln wo ich angeben kann:

Suche in Ordnern von 20131201 bis 20131231 wo sich eine 555123 txt befindet und rechne die einzelnen Daten aus gefundenen txt´s EINGANG AUSGANG UND ANZAHL ZUSAMMEN

Danke

PS: Während ich die Frage Verfasst habe ist mir ein Licht aufgegangen aber bin mir noch immer unsicher das ich es schaffe

Content-ID: 224565

Url: https://administrator.de/forum/rechnungs-abfrage-per-batch-ordner-struktur-224565.html

Ausgedruckt am: 23.12.2024 um 16:12 Uhr

colinardo
colinardo 15.12.2013 aktualisiert um 18:18:24 Uhr
Goto Top
Hallo dax4fun,
vielleicht hilft das als Denkanstoss:
@echo off & setlocal ENABLEDELAYEDEXPANSION
set "searchroot=c:\temp\source"  

for /f "delims=" %%a in ('dir /B /S /A-D "%searchroot%\555123*.txt"') DO @(  
	for /f "tokens=3,5,7 delims=: " %%b IN ('findstr /B "ID555123" "%%a"') DO @(  
		set /a eingang +=%%b
		set /a ausgang +=%%c
		set /a anzahl +=%%d
	)
)
echo Gesamt Eingang: !eingang!
echo Gesamt Ausgang: !ausgang!
echo Gesamt Anzahl:  !anzahl!
Das Script durchsucht in einem Root-Ordner alle Unterordner nach einer Textdatei nach dem Muster 555123*.txt und sucht in diesen Files dann nach einer Zeile die mit ID555123 beginnt und addiert die jeweiligen Werte aus den Files.
Den Rest kannst du ja mit Variablen versehen und eine Abfrage mit set /p basteln.

Grüße Uwe
dax4fun
dax4fun 15.12.2013 um 20:48:00 Uhr
Goto Top
PERFEKT DANKE face-smile

Könntest du mir bei noch einer Sache helfen face-smile

Wie kann ich es erreichen wenn ich 20131201 übergebe das immer +1 gerechnet wird bis 20131231 erreicht wird

Bsp.

set /p Datum=: 20131201

IF EXIST C:\20131201\555123*.txt copy C:\20131201bis20131231
IF EXIST C:\20131202\555123*.txt copy C:\20131201bis20131231
...
IF EXIST C:\%Datum%+29\555123*.txt copy C:\20131201bis20131231
IF EXIST C:\20131231\555123*.txt copy C:\20131201bis20131231

goto rechnen

HINTERGRUND: habe dann Abbrechnungsbereich und das würde ich dann pipe´n .... dann habe ich auch den Pfad der ja irgendwie das Datum ist und würde sehen wenn Daten fehlen

Danke
bastla
bastla 15.12.2013 aktualisiert um 21:56:53 Uhr
Goto Top
Hallo dax4fun!

Du kannst bei Verwendung der Schreibweise "JJJJMMTT" einfach mit
set /a Datum+=1
den Datumswert erhöhen.

Da allerdings Batch mit Datum nicht so richtig gut umgehen kann, ist die Abfrage auf das Monatsende etwas knifflig. Zerlegen könntest Du den Datumswert jedenfalls so:
set "Jahr=%Datum:~,4%"  
set "Monat=%Datum:~4,2%"  
set "Tag=%Datum:~6,2%"  
Die Operatoren (etwa "LSS") für einen Vergleich findest Du in der Online-Hilfe (mit "if /?") ...

Grüße
bastla
rubberman
rubberman 15.12.2013 aktualisiert um 21:58:14 Uhr
Goto Top
Hallo Zusammen,

ich bin mir nicht sicher, ob es wirklich notwendig ist, aber müsste man nicht die maximale Anzahl Tage im Monat kennen?
@echo off &setlocal

set "Datum=20131201"  

set /a "Month = 1%Datum:~4,2% %% 100, Year = %Datum:~,4%"  
set /a "MaxDOM = 30 + !(((Month & 9) + 6) %% 7) + !(Month ^ 2) * (!(Year %% 4) - !(Year %% 100) + !(Year %% 400) - 2)"  

for /l %%i in (%Datum% 1 %Datum:~,6%%MaxDOM%) do (
  echo %%i
)

pause
... in der FOR /L Schleife dann entsprechend mit %%i agieren ...

Grüße
rubberman
dax4fun
dax4fun 16.12.2013 um 02:14:17 Uhr
Goto Top
Danke fürs Interesse

Es FUNKT face-smile face-smile face-smile

Hatte Fehler bei der Ausgabe "echo Gesamt Eingang: !eingang! " hab es auf %eingang% geändert dann gings

Hab nicht gewusst das man mit "!" auch variablen deklarieren kann ??? bei mir hats nicht funktioniert