dax4fun
Goto Top

Gleiche Dateien in Ordner Gruppieren und zusammenzählen

Hi, Leute

Wie kann ich eine Anzahl an Rechungnen/Dateien in einem Ordner finden die eine eindeutige aber NICHT bekannte endung haben

Habe eine Computerkassa wo D:\Tools\user.txt der jetzt angemeldete User drinn steht

Wenn eine Rechnung produziert wird, wird die Rechung.txt in D:\RECHNUNGEN abgelegt und eine kopie D:\USER\%heutigesadatum%\Rechnung.%user%

Ziel: Morgen sollen die Rechnungen die am Vortag ausgestellt wurden auf die User aufgeteilt... werden wer wieviel ausgestellt hat.

Storno Rechnungen sollen berücksichtigt weden doch das sollte ich mit einer for schleife lösen können da "Storno" in Datei steht

Erste Schicht Heute
USER.TXT=123

RECHUNG.TXT => RECHNUNGEN =>DRUCKEN RECHNUNG.TXT
kopie an =>USER\%heutigesdatum%\RECHNUNG.123

Zweite Schicht Heute
USER.TXT=456

RECHUNG.TXT => RECHNUNGEN =>DRUCKEN RECHNUNG.TXT
kopie an =>USER\%heutigesdatum%\RECHNUNG.456

Abrechung Morgen
?????
suche in USER\%gestrigesdatum%\*.123 Anzahl=Bsp.3>123.txt , *.xxx Anzahl=Bsp.7>888.txt "xxx= Bsp. Aushilfe hat andere id kann bis 999 gehen"

Danke

Content-Key: 230062

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

Printed on: April 20, 2024 at 15:04 o'clock

Member: bastla
bastla Feb 15, 2014 updated at 23:25:20 (UTC)
Goto Top
Hallo dax4fun!

Wenn ich Dich richtig verstanden habe, könnte das etwa so aussehen:
@echo off & setlocal
set "Ordner=D:\USER"  

echo WScript.echo DateAdd("d",-1,Date)>%temp%\Gestern.vbs  
for /f %%i in ('cscript //nologo %temp%\Gestern.vbs') do set "Gestern=%%i"  

set "Users=%temp%\Users.txt"  
type nul>Users.txt
for %%i in ("%Ordner%\%Gestern%\*.*") do findstr "%%~xi" "%Users%">nul||>>"%Users%" echo %%~xi  

set "Liste=%Ordner%\Abrechnung-%Gestern%.txt"  
del "%Liste%" 2>nul  
for /f "delims=." %%i in ('sort "%Users%"') do for /f %%a in ('dir "%Ordner%\%Gestern%\*.%%i"^|findstr "Datei(en)"') do >>"%Liste%" echo %%i: %%a  
Grüße
bastla

[Edit] Sortierung hinzugefügt [/Edit]
Member: dax4fun
dax4fun Feb 15, 2014 updated at 23:31:53 (UTC)
Goto Top
Danke bastla
hab aber ein Problem mit vbs, das würde mir noch mehr probleme bereiten. Windows weiß nicht wie vbs öffnen ... hab mich schon durchgelesen registry editieren aber das kann noch warten.

Ich hab jetzt seit Veröffentlichung des Beitrages mein Problem immer weiter und weiter gekürzt :

Nachdem alle Dateien rechnungxyz.123 und rechnungxyz.345 im selben Ordner landen
warum nicht von der ersten Datei die endung in Variable Packen nachschauen wieviele es gibt danach die 123 Dateien löschen und wieder suchen bis der Ordner Leer ist

das ist glaube ich viel einfacher oder ???

Gruß
dax
Member: bastla
Solution bastla Feb 15, 2014, updated at Feb 16, 2014 at 00:02:34 (UTC)
Goto Top
Hallo dax4fun!

VBS wird nur für die Ermittlung des Datums von gestern verwendet (was sich zur Not auch per Batch lösen ließe) - zum Testen kannst Du auch einfach die Zeilen 4 und 5 durch
set "Gestern=15.02.2014"
ersetzen ...

... der Rest sollte auch ohne ein Löschen von Dateien funktionieren ...

Grüße
bastla
Member: dax4fun
dax4fun Feb 15, 2014 at 23:45:33 (UTC)
Goto Top
Aha, Ok Probiere ich mal face-smile

Kann dir nicht gleich eine Reaktion geben, muss mal deinen Code schritt für schritt durchgehen um ihn zu verstehen... ich will ja was Lernen damit ich dich nicht immer bitten muß face-smile face-smile

Danke dir
LG
dax
Member: dax4fun
dax4fun Feb 16, 2014 at 00:02:15 (UTC)
Goto Top
WOW FUNKTIONIERT !

Danke
LG
dax
Member: bastla
bastla Feb 16, 2014 updated at 15:53:39 (UTC)
Goto Top
Hallo dax4fun!

Freut mich ... face-smile

Als Ergänzung: Wenn Du Dateien, die das Wort "Storno" enthalten, von der Zählung ausschließen willst, müsste die Zeilen 13 etwa so aussehen:
for /f "delims=." %%i in ('sort "%Users%"') do for /f %%a in ('findstr /miv "Storno" "%Ordner%\%Gestern%\*.%%i"^|find /ic ".%%i"') do >>"%Liste%" echo %%i: %%a
[Edit] ... und da ja eigentlich die "Storno"-Datei eine Rechnung "neutralisieren" sollte, müsste dadurch die Gesamtzahl auch noch verringert werden - dann:
for /f "delims=." %%i in ('sort "%Users%"') do for /f %%a in ('dir "%Ordner%\%Gestern%\*.%%i"^|findstr "Datei(en)"') do call :ProcessUser %%i %%a  
goto :eof

:ProcessUser
set /a Anzahl=%2
for /f %%i in ('findstr /mi "Storno" "%Ordner%\%Gestern%\*.%1"') do set /a Anzahl-=2  
>>"%Liste%" echo %1: %Anzahl%  
[/Edit]

Grüße
bastla
Member: Endoro
Endoro Feb 16, 2014 at 18:14:07 (UTC)
Goto Top
Vorschlag am Rande:
@ECHO OFF &SETLOCAL disableDelayedExpansion
FOR %%a IN (*) DO IF NOT "%%~xa"=="" (SET /a %%~xa+=1) ELSE SET /a .+=1  
SET .
Gruss.
Member: bastla
bastla Feb 16, 2014 at 19:20:03 (UTC)
Goto Top
@ Endoro

Sehr hybsch ... face-smile

Grüße
bastla
Member: dax4fun
dax4fun Feb 16, 2014 updated at 23:21:14 (UTC)
Goto Top
Ich zeig euch mal was face-smile

100 % 1000 Fehler drinn bzw. unnötige Sachen aber es funkt face-smile
100%reine Scriptschnippsel hier aus dem Forum bzw. aus dem Internet abgewandelt

Aufgabe is es "echo SHOP_%EPSONNAME% EINGANG:%IN% AUSGANG:%OUT% RECHNUNGSANZAHL:%S3%"
zu erweitern mit ONL1 ONL2....ONL999 Variblen, halt die User die eingelogt waren inkl. Ticketanzahl um es auf einen FTP zu schieben (update.exe)


%COMPUTERNAME% CAS01_555123
%EPSONNAME%
555123
%ONLUSER% 001 bis 999
%STAMP%
Datum wann das letzte mal eod ausgeführt wurde
sky.exe VPN verbindung
update.exe
FTP update funktion wenn cas01_555xxx.exe wenn vorhanden dann downloaden und ausführen
eod.exe zum Kassensystem mitgelieferte Anwendung (die später bei :EOD formatiert wird)
set /a IN=%S1% / 100
eod.exe liefert cent Beträge

IN D:\config.txt
ONL=0/1 User abfrage ja nein
BIX=0/1
ist ein neuer Drucker BIXOLON falls der in verwendung sein sollte
FIS=0/1 //Auslandssystem Rechnung wird weitergeleitet auf einen Staatlichesdruckersystem wegen Steuer per map drive


@echo off
rem ping -n 15 127.0.0.1

REM ############CREATE COMPUTERNAMES########################
for /f "tokens=2 delims=_" %%s in ("%computername%") do set "EPSONNAME=%%s"  

REM ########################################################
REM ################# CREATE DATES #########################
REM ########################################################

REM ################# CREATE TIME ##########################
set STD=%time:~0,2%
if "%STD:~0,1%"==" " set STD=0%STD:~1,1%  

set MIN=%TIME:~3,2%

REM ################# CREATE STAMP #########################
if NOT EXIST D:\Tools\stamp.txt echo 10> D:\Tools\stamp.txt

REM ################# CREATE GESTERN #######################
set gjahr=%date:~-4%
set gmonat=777%date:~-7,2%
set gtag=1000%date:~-10,2%
set /a gvormonat=%gmonat%-1

if not %gtag%==100001 set /a gtag=%gtag%-1 & goto punktzwei

for %%j in (77700 77701 77703 77705 77707 77708 77710) do if %gvormonat%==%%j set /a gtag=100031 & goto punkteins
for %%k in (77704 77706 77709 77711) do if %gvormonat%==%%k set /a gtag=100030 & goto punkteins

set /a gtag=100028
for %%l in (2008 2012 2016 2020 2024) do IF %gjahr%==%%l set /a gtag=100029

:punkteins
if not %gmonat%==77701 set /a gmonat=%gmonat%-1 & goto punktzwei
set /a gmonat=77712
set /a gjahr=%jahr%-1

:punktzwei
set gtag=%gtag:~-2,2%
set gmonat=%gmonat:~-2,2%

set /a GESTERN=%gjahr%%gmonat%%gtag%
ping 127.0.0.1
REM ################# CREATE HEUTE #########################
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
set /a HEUTE=%jahr%%monat%%tag%
REM ########################################################

REM ########################################################
REM ################# LOAD ONLUSER #########################
REM ########################################################
for /f %%u in (D:\Tools\onl.txt) do set ONLUSER=%%u


REM ########################################################
REM ################# LOAD STAMP ###########################
REM ########################################################
for /f %%m in (D:\Tools\stamp.txt) do set STAMP=%%m

REM ########################################################
REM ################# ALLE VARIABLEN #######################
REM ########################################################
echo %GESTERN%
echo %HEUTE%
echo %COMPUTERNAME%
echo %EPSONNAME%
echo %ONLUSER%
echo %STAMP%
echo %STD%
echo %MIN%

REM ########################################################
REM ################# CREATE FOLDERS #######################
REM ########################################################
IF NOT EXIST C:\TICKETS md C:\TICKETS
IF NOT EXIST D:\V8\TICKETS md D:\V8\TICKETS
IF NOT EXIST D:\V8\ONL md D:\V8\ONL
IF NOT EXIST D:\V8\ONL\%HEUTE% md D:\V8\ONL\%HEUTE%

REM ########################################################
REM #################### SHEDULER###########################
REM ########################################################
goto sheduler

:LOADCONFIG
REM ########################################################
REM ################# LOAD CONFIG ##########################
REM ########################################################
for /f "tokens=2 delims==" %%o in ('findstr "/c:ONL=" D:\config.txt') do set ONL=%%o  

for /f "tokens=2 delims==" %%b in ('findstr "/c:BIX=" D:\config.txt') do set BIX=%%b  

for /f "tokens=2 delims==" %%f in ('findstr "/c:FIS=" D:\config.txt') do set FIS=%%f  

IF "%BIX%"=="1" goto BIXOLON  
IF "%BIX%" NEQ "1" SET BIX=0  
IF "%FIS%" NEQ "1" SET FIS=0  
IF "%ONL%" NEQ "1" SET ONL=0  

REM ########################################################
REM ################# START LOOP ###########################
REM ########################################################
:ping
start /WAIT /MIN D:\Tools\update.exe

if "%FIS%"=="1" net use R: \\192.168.234.35\txt /user:fiskal fiskal /persistent:no  

ping 10.10.10.50
if ERRORLEVEL == 1 goto reconnect

if "%ONL%"=="1" copy C:\TICKETS\*.txt D:\V8\ONL\%HEUTE%  

if "%ONL%"=="1" rename D:\V8\ONL\%HEUTE%\*.txt D:\V8\ONL\%HEUTE%\*.%ONLUSER%  

ping 127.0.0.1

if "%FIS%"=="1" move C:\TICKETS\*.txt D:\V8\TICKETS  

ping -n 2 127.0.0.1
for /f %%t IN ('dir /b D:\V8\TICKETS\*.txt') do move D:\V8\TICKETS\%%t R:\  
IF EXIST C:\TICKETS\*.* del /Q C:\TICKETS\*.* > NUL

REM ########################################################
REM ################### STOP LOOP ##########################
REM ########################################################
goto ping


REM ########################################################
REM ################### SET BIXOLON ########################
REM ########################################################
:BIXOLON
for /f "skip=4 tokens=3" %%a in ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\ESDS\PEpson" /v PEpsonComportSetting') do set PRN=%%a  

IF "%PRN%"=="COM5:115200,n,8,1" goto ping  

IF "%PRN%" NEQ "COM5:115200,n,8,1" goto instalbix  

:instalbix
REG ADD \\HKEY_LOCAL_MACHINE\SOFTWARE\ESDS\PEpson /v PEpsonComportSetting /t REG_SZ /d COM5:115200,n,8,1

start D:\Tools\Printer\bixdriver.exe
start D:\Tools\Printer\bix2usb.exe
REM ########################################################
REM ####################### END ############################
REM ########################################################
:end
exit

REM ########################################################
REM #################### START VPN #########################
REM ########################################################
:reconnect
START /wait /MIN D:\Tools\sky.exe
goto ping

REM ########################################################
REM #################### SHEDULER ##########################
REM ########################################################
:sheduler

IF %STD%=="00" goto weiteretasks  
IF %STD%=="01" goto weiteretasks  
IF %STD%=="02" goto weiteretasks  
if %STAMP% NEQ %GESTERN% goto starteod

:weiteretasks

goto LOADCONFIG

REM ########################################################
REM #################### START EOD #########################
REM ########################################################
:starteod

eod /shop:%EPSONNAME%:127.0.0.1 /date:%GESTERN% /output:%COMPUTERNAME%raw.txt
@echo off & setlocal
	set "S1=0"  
	set "S2=0"  
	set "S3=0"  

for /f "usebackq skip=1 tokens=1,4-6" %%s in ("%COMPUTERNAME%raw.txt") do (  
	set "Zahl=%%s"  
 	set /a "S1+=%%t"  
	set /a "S2+=%%u"  
 	set /a "S3+=%%v"  
)

set /a IN=%S1% / 100
set /a OUT=%S2% / 100

echo SHOP_%EPSONNAME% EINGANG:%IN% AUSGANG:%OUT% RECHNUNGSANZAHL:%S3%>%COMPUTERNAME%eod.txt
ping 127.0.0.1

IF EXIST D:\Dropbox copy %COMPUTERNAME%eod.txt D:\Dropbox\%EPSONNAME%EOD...%eoddate%.txt

move %COMPUTERNAME%eod.txt D:\V8\Global\%EPSONNAME%EOD...%eoddate%.txt
Member: dax4fun
dax4fun Feb 17, 2014 updated at 02:49:18 (UTC)
Goto Top
@bastla hab alles eingefügt funktioniert super auch Storno

hab dann etliche FOR versuche probiert, an dieser Datei :

%COMPUTERNAME%eod.txt:
SHOP_556001 EINGANG:208 AUSGANG:107 RECHNUNGSANZAHL:42
221: 4
441: 12
888: 9

damit ich alles in einer Zeile habe doch immer fehl ausgaben
einer der versuche...
for /f "tokens=1,2 skip=1" %%o in ('%COMPUTERNAME%eod.txt') do echo %%o   

hab auch usebackq (tokens1-1, 1,2 , 2 ) verwendet wie in diesem funktionierendem Bsp. wo aus :
Shop	Date	Game	TStakes	TReturns	TTickets	TChange	Open TStakes	Open TReturns	Open TTickets
555123 2014-02-16 Euros 5200 000 7 0 0 0 0
555123 2014-02-16 KM 15600 10760 35 0 0 0 0 
mit
@echo off & setlocal
	set "S1=0"  
	set "S2=0"  
	set "S3=0"  

for /f "usebackq skip=1 tokens=1,4-6" %%s in ("%COMPUTERNAME%raw.txt") do (  
	set "Zahl=%%s"  
 	set /a "S1+=%%t"  
	set /a "S2+=%%u"  
 	set /a "S3+=%%v"  
)
das herauskam
SHOP_556001 EINGANG:208 AUSGANG:107 RECHNUNGSANZAHL:42
aber es geht nicht??? jetzt kann ich nicht mal mehr was probieren ich glaub dem Rechner reichts auch schon, jetzt startet er die txt beim ausführen der Bat face-smile
Member: Endoro
Endoro Feb 17, 2014 at 09:00:59 (UTC)
Goto Top
Hey,
schreib einfach den Input und erwarteten Output auf.
Member: dax4fun
dax4fun Feb 17, 2014 updated at 16:49:45 (UTC)
Goto Top
Hi @Endoro
Ich würde aus Bastla´s Batch die Ergebnisse, die aus der Schleife gewonnen werden als Variable brauchen
set "Ordner=D:\ONL"  

set "Users=%temp%\Users.txt"  
type nul>Users.txt
for %%i in ("%Ordner%\%GESTERN%\*.*") do findstr "%%~xi" "%Users%">nul||>>"%Users%" echo %%~xi  

set "Liste=%COMPUTERNAME%eod.txt"  
rem del "%Liste%" 2>nul  
for /f "delims=." %%i in ('sort "%Users%"') do for /f %%a in ('dir "%Ordner%\%GESTERN%\*.%%i"^|findstr "Datei(en)"') do call :ProcessUser %%i %%a  
goto :eof

:ProcessUser
set /a Anzahl=%2
for /f %%i in ('findstr /mi "Storno" "%Ordner%\%GESTERN%\*.%1"') do set /a Anzahl-=2  
>>"%Liste%" echo %1: %Anzahl%  
Member: Endoro
Endoro Feb 17, 2014 at 17:09:47 (UTC)
Goto Top
Zum Beispiel:

for /f "usebackqtokens=1*delims=: " %%a in ("%Liste%") do set "user.%%~a=%%~b"  
set "user."  
Member: bastla
bastla Feb 17, 2014 at 18:04:11 (UTC)
Goto Top
Hallo dax4fun!
Ich würde aus Bastla´s Batch die Ergebnisse, die aus der Schleife gewonnen werden als Variable brauchen
Wozu? Danach wäre doch vermutlich wieder eine Schleife fällig, um diese Variablen weiter zu verarbeiten ...

Grüße
bastla
Member: dax4fun
dax4fun Feb 17, 2014 at 19:16:42 (UTC)
Goto Top
Hi, Endoro, bastla
Wenn ich die Variablen habe, kann ich die überall ausgeben, wie hier wo ich die User zur Abrechnung dazu hänge

Bsp.
echo SHOP_%SHOPNR% EINGANG:%IN% AUSGANG:%OUT% RECHNUNGSANZAHL:%S3% %USER1%:%Anzahl% %2:%Anzahl% %3:%Anzahl%>datei

bzw. muss ich bald auch ein xml mit diesen Daten füllen wo ich nicht mal die struktur kenn

Ich bin mir überhaupt nicht mehr sicher mit Batch und diesem Monsterskript da es immer eine Baustelle ist

Wie krieg ich das hin jedem token eigene Variable zuordnen
variable =0
und dann variable+1
oder ?

Danke
Member: dax4fun
dax4fun Feb 18, 2014 updated at 03:00:42 (UTC)
Goto Top
Hi, hoffnungslos ich bin zu blöd

Lg Dax
Member: Endoro
Endoro Feb 18, 2014 at 09:18:58 (UTC)
Goto Top
Hi,

versuch es mal so:
@echo off &setlocal
set "line=SHOP_%SHOPNR% EINGANG:%IN% AUSGANG:%OUT% RECHNUNGSANZAHL:%S3%"  
for /f "usebackqtokens=1*delims=: " %%a in ("%Liste%") do call makeline:"%%~a" "%%~b"  
rem more code here
echo(%line%
goto:eof

:makeline
set "line=%line% %~1:%~2"  
exit /b
Transponieren heisst das, imo.
Gruss.
Member: dax4fun
dax4fun Feb 18, 2014 at 11:11:24 (UTC)
Goto Top
Hi , Endoro hab probiert dein Script dazu zu hängen es bewirkte nichts.... mit dem jetztigen code bekomme ich folgendes raus
SHOP_556001 EINGANG:208 AUSGANG:107 RECHNUNGSANZAHL:42    
221: 4
441: 12
888: 9
Das würde ja passen nur wenn die user (onl) halt nach der 42 eingefügt werden könnten so :
SHOP_556001 EINGANG:208 AUSGANG:107 RECHNUNGSANZAHL:42  onl221: 4 onl441: 12 onl888: 9
ich hab %ONL1% %ONL2% %ONL3% genommen wo ich erwarte das %ONL1%=221: 4.... rein kommt. da ich vorher nicht weiß welcher user vorhanden sein wird, muss ich ('dir "%Ordner%\%GESTERN%\*.%%i"^|findstr "Datei(en)"') verwenden um die user und die Anzahl der tickets die sie ausgestellt haben zu ermitteln. dazu komm noch wenn ein ticket storno enthällt soll es nicht mitgezählt werden do call :ProcessUser
erst dann hab ich die Daten zum vervollständigen der Line

oder liege ich falsch und ich weiß nicht was ich editieren muss um es mit deinem Script zu erledigen??? das ist der jetztige code
echo SHOP_%EPSONNAME% EINGANG:%IN% AUSGANG:%OUT% RECHNUNGSANZAHL:%S3% %ONL1% %ONL2% %ONL3% %ONL4%>D:\V8\Global\%EPSONNAME%EOD...%GESTERN%.txt

set "Ordner=D:\V8\ONL"  

set "Users=D:\V8\ONL\Users.txt"  
type nul>Users.txt
for %%i in ("%Ordner%\%GESTERN%\*.*") do findstr "%%~xi" "%Users%">nul||>>"%Users%" echo %%~xi  

set "Liste=D:\V8\Global\%EPSONNAME%EOD...%GESTERN%.txt"  
rem del "%Liste%" 2>nul  
for /f "delims=." %%i in ('sort "%Users%"') do for /f %%a in ('dir "%Ordner%\%GESTERN%\*.%%i"^|findstr "Datei(en)"') do call :ProcessUser %%i %%a  
goto :eof

:ProcessUser
set /a Anzahl=%2
for /f %%i in ('findstr /mi "Storno" "%Ordner%\%GESTERN%\*.%1"') do set /a Anzahl-=2  
>>"%Liste%" echo %1: %Anzahl%  
Member: Endoro
Endoro Feb 18, 2014 at 11:24:20 (UTC)
Goto Top
Hey,
du könntest die Orders von einem Tag gepackt hochladen.
Gruss.
Member: dax4fun
dax4fun Feb 18, 2014 updated at 11:53:26 (UTC)
Goto Top
Hi, danke für die Antwort

Die Ordner sind nach Datum sortiert und drinnen befinden sich nur txt dateien 897324987329842.txt mit dem inhalt : 123123123....1.....123

ich hab mir zum testen eine txt datei genommen paar mal kopiert und in eine habe ich storno reingeschrieben

da ich die 23423423432.txt mit dem usernamen rename, sind im Ordner danach 4342342342342.221 bzw hab ich auch 4342342342342.441 und 888 drinnen
damit trenne ich die dateien per user

697bb32fb9ba1fa4759e5b3fe3082fcf
Danke
LG
Member: Endoro
Solution Endoro Feb 18, 2014, updated at Feb 19, 2014 at 01:35:16 (UTC)
Goto Top
Ok, here we go:
@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "yesterday=20140218"  
FOR %%a IN ("%yesterday%\*") DO (  
	SET /a bill%%~xa+=1
	SET /a billcount+=1
)
FOR /f "delims=" %%a IN ('FINDSTR /mi "storno" "%yesterday%\*"') DO (  
	SET /a storno%%~xa+=1
	SET /a stornocount+=1
)
SET "line=%yesterday:~6,2%.%yesterday:~4,2%.%yesterday:~0,4% Rechnungen: %billcount%, Storno: %stornocount%"  
FOR /f "tokens=2*delims==." %%a IN ('SET bill.') DO (  
	IF DEFINED storno.%%a (
		FOR /f %%c IN ('SET /a %%b-storno.%%a') DO CALL SET "line=%%line%%, %%a:%%c"  
	) ELSE (
		CALL SET "line=%%line%%, %%a:%%b"  
	)
)
ECHO(%line%
Gruss.
Member: dax4fun
dax4fun Feb 19, 2014 updated at 01:39:21 (UTC)
Goto Top
Hi, es Fehlen mir die Worte, ich bin so Glücklich.... meine Augen sind voller Tränen

1000x Danke

Ein paar Sachen noch:

1.Habe SET /a billcount+=1 von 1 auf 2 gesetzt weil wenn eine Rechung storniert wird, darf nicht auch die eigentliche Rechnung mittgerechnet werden
Bsp. 5 Rech. - 1 StornoRech. = 3, nicht 4.
Dadurch wird die gesamt Rechnungszahl verdoppelt !!! für mich nicht so tragisch bekomme die Anzahl aus andere Quelle..
(ich hoffe nur das es nicht bei mehr oder weniger Storno Rechnungen irgendwie abweicht muss ich noch testen)

2.Ist es möglich irgendwie den Pfad anzupassen damit es auch aus einem anderen Ordner ausgeführt werden kann ???

3. Besonders Danke für Storno Gesamt das kann ich super weiter verwenden

Ich mach jetzt mal fröhlich weiter, und hoffe ich kann die Ausgabe wieder in Variablen packen, weil muss mir mal XML Anschauen wo ich die Daten wieder reinbringen muss, und Arbeite bzw. Lerne wieder zu Tageszeiten. face-smile

Danke
Member: Endoro
Endoro Feb 19, 2014 updated at 18:14:07 (UTC)
Goto Top
Zur Berechnung der nicht stornierten Rechnungen kann der Rechnungszähler bei jedem Storno um 1 vermindert werden.
Zu Beginn der Batch kann ein beliebiges Verzeichnis eingestellt werden.

@ECHO OFF &SETLOCAL disableDelayedExpansion
CD /d "%UserProfile%\Rechnungen"  
SET "yesterday=20140218"  
FOR %%a IN ("%yesterday%\*") DO (  
	SET /a bill%%~xa+=1
	SET /a billcount+=1
)
FOR /f "delims=" %%a IN ('FINDSTR /mi "storno" "%yesterday%\*"') DO (  
	SET /a storno%%~xa+=1
	SET /a stornocount+=1
	SET /a billcount-=1
)
SET "line=%yesterday:~6,2%.%yesterday:~4,2%.%yesterday:~0,4% Rechnungen: %billcount%, Storno: %stornocount%"  
FOR /f "tokens=2*delims==." %%a IN ('SET bill.') DO (  
	IF DEFINED storno.%%a (
		FOR /f %%c IN ('SET /a %%b-storno.%%a') DO CALL SET "line=%%line%%, %%a:%%c"  
	) ELSE (
		CALL SET "line=%%line%%, %%a:%%b"  
	)
)
ECHO(%line%
Gruss.