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-Key: 224565

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

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

Member: colinardo
colinardo Dec 15, 2013 updated at 17:18:24 (UTC)
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
Member: dax4fun
dax4fun Dec 15, 2013 at 19:48:00 (UTC)
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
Member: bastla
bastla Dec 15, 2013 updated at 20:56:53 (UTC)
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
Member: rubberman
rubberman Dec 15, 2013 updated at 20:58:14 (UTC)
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
Member: dax4fun
dax4fun Dec 16, 2013 at 01:14:17 (UTC)
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