cced-de
Goto Top

Formatierte Aufbereitung einer DiskUse-Ausgabe per Batch

Hallo zusammen,
ich möchte folgendes erreichen:
In einer Textdatei sollen die ersten 8 Zeilen gelöscht und verschiedene Texte gefunden und dann gelöscht werden bzw. umsortiert werden.
Die Quelldatei wird mit diskuse.exe" /d:w /w /t /v erzeugt.
Wobei der Aufbau der Datei folgender ist:

Die vorhandene TXT (CNT.txt) Datei sieht z.B. so aus:
DiskUse                   Version 1.3

Scanning Path C:\FileBase\.
Resolving Names.
Sorting.


CCED                Admin                   213
               36 : 06/17/2011 : C:\FileBase\Datei1.zip
              150 : 06/17/2011 : C:\FileBase\\09_I4_SandBlood.zip
               27 : 06/17/2011 : C:\FileBase\\DL.Log

Die geänderte Datei (Das Ergebnis) soll dann wie folgt aussehen.

Datum          Dateiname                               Dateigröße in Bytes
--------------------------------------------------------------------------------------
06/17/2011   Datei1.zip                                           4294967296
06/17/2011   09_I4_SandBlood.zip                               6589545
06/17/2011   DL.Log                                                          54824

Ist dieses Problem per Batch zu lösen?
Wenn ja wie? Bin euch für die Hilfe Dankbar!

Gruß CCED
Kommentar vom Moderator Biber am 18.06.2011 um 14:43:38 Uhr
Original-Titel "Batch- Findstr - SyntaxFehler bei der Ausführung" etwas an die Realität angeglichen.

Content-ID: 168208

Url: https://administrator.de/forum/formatierte-aufbereitung-einer-diskuse-ausgabe-per-batch-168208.html

Ausgedruckt am: 25.12.2024 um 17:12 Uhr

Skyemugen
Skyemugen 17.06.2011 um 14:50:00 Uhr
Goto Top
Aloha,


... spielen wir heute Ratequiz? Was hat der Threadtitel mit dem EP zu tun?

Batch- Findstr - SyntaxFehler bei der Ausführung sollte dazu nicht ein Skript bereits vorhanden sein?

Sollen wir dir jetzt etwas neues hinklatschen oder bei etwas helfen? Hast du bereits ein Skript (wovon ich anhand des Titels ausgehe) oder wie oder was?

Ist dieses Problem per Batch zu lösen?

Ja.

greetz André

P.S.: Warum enthälft die geänderte Datei, Daten, die in der Ursprungsdatei nicht vorkommen? bei der Ausgabe kann man auch gleich dir mit bisschen Schnickschnack drumherum nutzen ... was genau macht diskuse.exe eigentlich
cced-de
cced-de 17.06.2011 um 16:49:25 Uhr
Goto Top
Hallo,
natürlich hast du Recht!!
Ich habe zuvor versucht z.b. die unerwünschten Daten
so und ähnlich aus der Quelldatei herauszulöschen:
for %i in (CNT1.txt) do findstr /b /i /C:"C:\FileBase\ %~ni" 1>nul echo && del "%i"  
Aber egal wie ich es probiert habe, ich habe immer einen Syntaxfehler erhalten.

Zur Erklärung, diskuse.exe ist Copyright 1996, Microsoft Corporation und stammt aus dem Windows 2003 Resource Kit Utility
Beschreibung:
DiskUse is a command-line tool that scans directories on a hard disk and reports on space used by each user. This tool can scan a single directory, a directory tree, or an entire drive and can extract information on one user or all users. Reports can be displayed on-screen or output to a file, in table or text format. DiskUse can also list all the files owned by a user or users, filtered in a variety of ways.

Die einzigen Daten die in der gewünschten Zieldatei enthalten sind, die nich aus der Quelldatei stammen sind:
Datum          Dateiname                               Dateigröße in Bytes 
-------------------------------------------------------------------------------------- 
und die wiederum kann man ja einfach per
 Echo  Datum          Dateiname                               Dateigröße in Bytes >Zieldatei.txt
einfügen.

Mein Script sieht zur Zeit so aus:
"%tools%diskuse.exe" /d:w /w /t /v %Upload%>"%ProgPath%\CNT.txt"  
set "CNTOld=CNT.txt"  
set "CNTNEW=CNT1.txt"  
set /a Von=1
set /a Bis=8

if exist "%CNTNEW%" del "%CNTNEW%"  
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%CNTOld%"') do (  
    if %%i lss %Von% echo.%%j
    if %%i gtr %Bis% echo.%%j
)>>"%CNTNEW%"  
for %i in (CNT1.txt) do findstr /b /i /C:FileBase" %~ni 1>nul echo && del "%i"  
echo finde erl.
echo.>>Content.txt
echo.>>Content.txt
echo -------------------------------------------------------------------------->>Content.txt
echo Groesse in Bytes    von Datum         Dateiname / Pfad>>Content.txt
Type CNT1.txt >>Content.txt


Wenn du weist, wie ich mein Problem lösen kann, wäre ich die sehr dankbar, wenn du mir sagen könntest wie.

Gruß und schon mal ein Danke im Voraus
CCED
Friemler
Friemler 17.06.2011 um 20:27:49 Uhr
Goto Top
Hallo cced-de

den Thread solltest Du wirklich mal umbenennen...

Teste mal das hier:
@echo off

setlocal


set "InputFile=%ProgPath%\CNT.txt"  
set "OutputFile=content.txt"  


"%tools%\diskuse.exe" /d:w /w /t /v %Upload% >"%InputFile%"  


(echo.
 echo.

 echo Datum       Dateiname                                          Groesse in Bytes
 echo -------------------------------------------------------------------------------


 for /f "skip=8 tokens=2* delims=:" %%a in ('findstr "^" "%InputFile%"') do (  
   for /f "tokens=1" %%i in ("%%a") do (  
     set "String=%%i"  
     call :ConcatString 12 0
   )

   for /f "tokens=*" %%i in ("%%b") do (  
     set "String=%%~nxi"  
     call :ConcatString 51 0
   )

   for /f "tokens=*" %%i in ("%%b") do (  
     set "String=%%~zi"  
     call :ConcatString 16 1
   )

   call :OutputLine
 )
) >"%OutputFile%"  

exit /b



:ConcatString
  >"%TEMP%\strlen.txt" <NUL (set /p "=<%String%"&echo.&set /p "=<"&echo.)  
  for /f "delims=:" %%l in ('findstr /o /b "<" "%TEMP%\strlen.txt"') do set /a "nSpaces=%1-(%%l-3)"  
  del "%TEMP%\strlen.txt"  

  setlocal enabledelayedexpansion
  set "Space="  
  for /l %%z in (1,1,%nSpaces%) do set "Space=!Space! "  
  endlocal & set "Space=%Space%"  

  if "%2" equ "0" set "Line=%Line%%String%%Space%"  
  if "%2" equ "1" set "Line=%Line%%Space%%String%"  
exit /b



:OutputLine
  for %%s in ("%Line%") do echo %%~s  
  set "Line="  
exit /b

Gruß
Friemler


[EDIT]
Nachgereichte Erklärung:

Die FOR-Schleife in Zeile 20 verarbeitet die Datei, die von DISKUSE erzeugt wurde, zeilenweise.

Wegen skip=8 werden dabei die ersten 8 Zeilen übersprungen. Das eigentliche Einlesen übernimmt der FINDSTR-Befehl, der wegen "^" nach allen Zeilen sucht, die einen Anfang haben. Er findet also alle Zeilen.

Als Trennzeichen zwischen den einzelnen Bestandteilen (Tokens) einer Zeile wird wegen delims=: der Doppelpunkt definiert.

Wegen tokens=2* wird das Datum der Laufvariablen %%a zugewiesen und der Dateiname inkl. Pfad der automatisch erzeugten Laufvariablen %%b.

In beiden Fällen enthalten die Laufvariablen aber noch führende (und nachfolgende) Leerzeichen. Die würden vor allem bei der Ermittelung der Dateigröße zu einem Fehler führen und außerdem das Layout der Tabelle unschön machen.

Die Leerzeichen um das Datum werden von der FOR-Schleife in den Zeilen 21 bis 24 entfernt und nur der Datums-String an die Laufwariable %%i zugewiesen.

Die FOR-Schleife in den Zeilen 26 bis 29 entfernt die führenden Leerzeichen des Dateipfades/-namens und ermittelt wegen dem ~nx in set "String=%%~nxi" den Namen inkl. Erweiterung der Datei.

Die FOR-Schleife in den Zeilen 31 bis 34 entfernt auch die führenden Leerzeichen des Dateipfades/-namens und ermittelt wegen dem ~z in set "String=%%~zi" die Größe der Datei.

Das Unterprogramm ConcatString, was aus allen diesen FOR-Schleifen aufgerufen wird, hat als ersten Parameter die Breite der jeweiligen Tabellenspalte (beim Datum also 12, beim Dateinamen 51 und bei der Dateigröße 16 Zeichen). Der zweite Parameter gibt an, ob der Wert linksbündig (zweiter Parameter gleich 0) oder rechtsbündig (zweiter Parameter gleich 1) ausgegeben werden soll. Bei der Dateigröße ist die rechtsbündige Ausgabe sinnvoll, deshalb das call :ConcatString 16 1 in Zeile 33.

Im Unterprogramm ConcatString wird in den Zeilen 45 und 46 die Länge des auszugebenden Strings ermittelt und mit diesem Wert berechnet, wie viele Leerzeichen ergänzt werden müssen, um die Tabellenspalte auf die gewünschte Breite (enthalten im Parameter %1) aufzufüllen. Dazu wird eine Hilfsdatei verwendet, die in Zeile 47 wieder gelöscht wird. Da alleine die Erklärung dieser zwei Zeilen eine halbe DIN A4 Seite füllen würde, möge der geneigte Leser die genaue Funktionsweise unter Zuhilfenahme der Hilfe von FINDSTR, seines analytischen Verstandes und dem Betrachten der erzeugten Hilfsdatei in einem (Hex-)Editor selbst herausfinden face-wink .

In den Zeilen 49 bis 52 wird eine Variable erzeugt, die aus der berechneten Anzahl von Leerzeichen besteht. Da hierfür die verzögerte Variablenerweiterung benötigt wird, wird diese in Zeile 49 eingeschaltet und in Zeile 52 wieder ausgeschaltet. Um die erzeugte Variable Space außerhalb dieses Blocks zur Verfügung zu haben, muss in der Zeile mit dem ENDLOCAL-Befehl, mit diesem durch den Operator & verkettet, die Zuweisung set "Space=%Space%" stehen. Genaueres dazu findet man in diesem Thread und in diesem Tutorial von Benutzer pieh-ejdsch.

In den Zeilen 54 und 55 wird der Inhalt einer Zeile in der Ausgabedatei zusammengebaut (die Variable Line wird verlängert), in Abhängigkeit des Parameters %2 werden die eben erzeugten Leerzeichen vor (Zeile 55, rechtsbündig) oder nach (Zeile 54, linksbündig) dem Wert der aktuellen Tabellenspalte eingefügt.

Nachdem eine Zeile der Ausgabedatei komplett erzeugt wurde, wird in Zeile 36 das Unterprogramm OutputLine aufgerufen.

Die Ausgabe erfolgt in Zeile 61 über eine FOR-Schleife, da beim Ausgeben von Laufvariablen der FOR-Schleife Sonderzeichen wie %, &, ^ keine Probleme machen (für die Experten: Bei Verwendung von verzögerter Variablenerweiterung macht die Kombination ^! Probleme). Danach wird in Zeile 62 die Variable Line wieder gelöscht, damit beim nächsten Durchlauf der Hauptschleife (Zeilen 20 bis 37) wieder mit einer leeren Puffervariablen begonnen werden kann.

Da die Zeilen 13 bis 38 einen in Klammern eingeschlossenen Block bilden, werden sämtliche Ausgaben, auch im Unterprogramm OutputLine, mit >"%OutputFile%" in Zeile 38 in die Ausgabedatei umgeleitet.

Ausführliche Informationen zu FOR-Schleife liefert mein Tutorial zur FOR-Schleife.
[/EDIT]
cced-de
cced-de 18.06.2011 um 13:34:07 Uhr
Goto Top
Hallo Friemler,
erst einmal vielen Dank für deine Unterstützung!! Super gelöst. Alles was ist wollte funktioniert nachdem ich die Pfade angepasst habe.
Nur ein Problem habe ich noch mit der Batch.

Der Code, den du mir zur Verfügung gestellt hast, ist nur ein "kleiner" Bestandteil eines größeren Scripts.
Und nach der Ausführung deines Codes wird die Batch ja mit Exit /B beendet. Allerdings soll die Batch danach bei weiterlaufen.

Kommentiere ich das Exit /B mit Rem aus, erhalte ich die Fehlermeldung:
Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.

lässt sich das noch umgehen?

LG CCED
Friemler
Friemler 18.06.2011 um 13:46:43 Uhr
Goto Top
Hallo CCED,

ConcatString und OutputLine sind Unterprogramme. Wenn Du einfach das EXIT /b entfernst, wird versucht den Code danach auszuführen, bis das Dateiende erreicht ist. Eigenen Code musst Du vor das EXIT /B platzieren.

Gruß
Friemler
cced-de
cced-de 18.06.2011 um 14:17:32 Uhr
Goto Top
hmmmm,
das funktioniert aber leider nicht.
Ich habe das mal wie folgt gemacht...
 
:OutputLine
  for %%s in ("%Line%") do echo %%~s  
  set "Line="  

del %InFile%
del %Inputfile%

echo ! - %Date% - %Time%: Mailtext wird erstellt >>%SLOG%
echo ! - %Date% - %Time%: InfoMail wird Versandt >>%SLOG%
echo ! - InfoMail wird Versandt
echo ! - %Date% - %Time%: Untersuche %Upload%>>%SLOG%
echo ! - Untersuche %Upload%\
echo %Upload% >%Temp%\LW.txt
FOR /F "tokens=1 delims=\ " %%i in (%Temp%\lw.txt) do set LW=%%i  
%ProgLW%
cd %ProgPath%
"%tools%blat.exe" "%ProgPath%Content.txt" -from %MyMail% -U %MySMTPLogin% -pw %MyMailPW% -to %MyMail% -bf %Progpath%%Mailinglst% -subject "%Subject%"?  
if errorlevel=0 echo ! - %Date% - %Time%: Mail wurde erfolgreich versandt >>%SLOG%

exit /b
und hier taucht wieder der Fehler auf:
Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess  verwendet wird.
Friemler
Friemler 18.06.2011 um 14:25:59 Uhr
Goto Top
Hallo CCED,

das Programm endet bei dem EXIT /b in Zeile 40! Die EXIT /b-Befehle in den Zeilen 56 und 63 dienen zum Rücksprung ins Hauptprogramm, nachdem das jeweilige Unterprogramm abgearbeitet wurde.

Gruß
Friemler
cced-de
cced-de 18.06.2011 um 14:33:10 Uhr
Goto Top
Grummellllll..
kaum macht mann´s richtig, schon funktioniert es ! face-smile
Danke für deine Unterstützung !!!!!!!!

Gruß CCED
Biber
Biber 18.06.2011 um 14:38:34 Uhr
Goto Top
[OT] @Friemler

These 1: Das Einsparen von Kommentarzeilen in Skripten hat keinen positiven Einfluss auf die Entwicklungszeit.

These 2: Wenn ein "exit /b" statt des vorgesehenen "goto :eof" zwar funktioniert, aber über keine Suchmaschine dieser Galaxie als Abschlussmarke eines geCALLten Batch-Unterprogrammblocks erklärt wird, dann erleichtert es die Les- und Nachvollziehbarkeit für Wochenendskripter nicht.

Es gibt immer wieder Beiträge, bei denen mir der Begriff "selbst verursachte Leiden" durch den Kopf schiesst... face-wink

Grüße
Biber
[/OT]
Friemler
Friemler 18.06.2011 um 14:40:32 Uhr
Goto Top
Gern geschehen.

BTW: Die Zeilen 14 und 15 aus deiner obigen Ergänzung könntest Du folgendermaßen ersetzen/vereinfachen:
for %%i in ("%Upload%") do set "LW=%%~di"

Gruß
Friemler
Friemler
Friemler 18.06.2011 um 14:55:20 Uhr
Goto Top
[OT] @Biber

Zu These 1:
Der TO hat selbst Code gepostet, der nicht den Eindruck machte, er sei völlig ahnungslos. Nachfragen zum Code beantworte ich gerne, vorausgesetzt dass der Fragesteller auch etwas Eigeninitiative zeigt und die brain.exe gestartet hat face-wink . Und das jemand eine solche Nachfrage stellen könnte, wäre mir im Traum nicht eingefallen; ich hätte sowieso keinen Kommentar für diesen Fall eingebaut.

Zu These2:
Wenn ich bei Google nach "batch exit /b" suche, erhalte ich als erstes Suchergebnis die sehr gute Seite von Rob van der Woude, wo genau das erklärt wird. Deine Aussage erschien mir auch sehr unwahrscheinlich.

Um selbst verursachte Leiden zu vermeiden, müsste ich dem Forum den Rücken kehren. Es gibt eben Dinge, die man hinnehmen muss.

Gruß
Friemler
[OT]
Friemler
Friemler 18.06.2011 um 16:26:08 Uhr
Goto Top
[OT]@Biber

Erklärung zum Script nachgeliefert. Die These mit der Zeitersparnis hat sich auch hier nicht bewahrheitet face-wink .

Gruß
Friemler
[/OT]
Friemler
Friemler 18.06.2011 um 17:03:37 Uhr
Goto Top
Wenn Dein Problem damit gelöst ist, setze doch bitte noch den grünen Haken.

Gruß
Friemler
Biber
Biber 18.06.2011 um 17:34:38 Uhr
Goto Top
Och Friemler,

Zitat von @Friemler:
[OT]@Biber

Erklärung zum Script nachgeliefert. Die These mit der Zeitersparnis hat sich auch hier nicht bewahrheitet face-wink .

Gruß
Friemler
[/OT]
Ich wollte dich doch mit meiner kleinen Randbemerkung nicht zu unbezahlter Wochenendarbeit anstiften.
Und ehrlich, mit
These 1: Das Einsparen von Kommentarzeilen in Skripten hat keinen positiven Einfluss auf die Entwicklungszeit.
...meinte ich wirklich so kleine Kommentare wie "REM hier Rücksprung zur CALLing-Zeile".

Ausserdem - ja hey! Es waren doch nur zwei Thesen. Unbewiesene Behauptungen. Mehr nicht.

Wenn ich Glaubenskriege hätte auslösen wollen, dann hätte ich 99 davon an irgendeine Kirchentür getackert.
Hier sollte es wirklich nur eine Randmerkung ohne unmittelbar abzuleitenden Handlungsbedarf sein.

Dennoch vielen Dank für deine Mühe.

Schönes Wochenende
Biber
Friemler
Friemler 18.06.2011 um 17:41:23 Uhr
Goto Top
Na ja, wenn mich jemand bei meiner Ehre packt... face-wink

Und grundsätzlich gebe ich Dir mit den Kommentaren ja recht, hatten wir ja auch schonmal am Anfang unserer "Bekanntschaft". Deswegen auch die nachgelieferte Erklärung.

Auch Dir ein schönes WE
Friemler
cced-de
cced-de 18.06.2011 um 20:21:29 Uhr
Goto Top
Hallo, ich noch mal...

nur um meinen bescheidenen Senf auch noch einmal dazu zu geben face-smile
1. Ja ich bin ein WE Scriptler!!!
2. Ja, ich haben meinen Beitrag falsch deklariert!
3. Nur damit Ihr seht, wobei Ihr mir geholfen habt... Poste ich hier mal mein gesamtes Script....
Kommentare und Verbesserungsvorschläge sind immer willkommen. Bitte keine annähernde Perfektion erwarten bin eben nur WochenEnd scriptbastler!!!

Dann noch zur Erklärung was das Script macht:
Es ist ein Client- und Server Script.
Die Serverseite des Scripts sieht in einem Ordner nach, ob neue Daten vorhanden sind.
Wenn ja, werden diese gepackt und in einen anderen Ordner verschoben. Nach X Tagen werden die gepackten Daten in ein weiteres Verzeichnis verschoben (OLD) und weiter nach x Tagen gelöscht.
Die Clientseite grob beschrieben... guckt auf einem Webserver nach, ob dort neue gepackte Daten liegen, und bietet diese zum Download an.
Es werden zusätzliche Tools benutzt:
blat.dll
blat.exe
blat.lib
Blat is a Win32 command line utility that sends eMail using SMTP or post to usenet using NNTP.
____________________________________________________________________________________________________
delage32.exe
DelAge32 löscht oder verschiebt Dateien mit einem Mindestalter (Anzahl Tage).
____________________________________________________________________________________________________
Diskuse.exe
DiskUse is a command-line tool that scans directories on a hard disk and reports on space used by each user.
This tool can scan a single directory, a directory tree, or an entire drive and can extract information on
one user or all users. Reports can be displayed on-screen or output to a file, in table or text format.
DiskUse can also list all the files owned by a user or users, filtered in a variety of ways
____________________________________________________________________________________________________
NewRename.exe
Die Eigenentwicklung eines Freundes zum automatischem umbenennen von Dateien.
____________________________________________________________________________________________________
robocopy.exe XP010
In den Windows Server 2003 Resource Kit Tools befindet sich das kostenlose Kommandozeilen-Tool Robocopy.exe.
Damit hat man den absoluten Spezialist für alle Belange der Datensynchronisation (Backup).
Mit 72 Schaltern erledigt das Tool selbst ungewöhnliche Aufgaben extrem schnell und informativ.
____________________________________________________________________________________________________
wget.exe 1.11.4
The recursive retrieval of HTML pages, as well as FTP sites is supported -- you can use Wget to make mirrors
of archives and home pages, or traverse the web like a WWW robot (Wget understands /robots.txt).
Wget works exceedingly well on slow or unstable connections, keeping getting the document until it is fully retrieved.
Re-getting files from where it left off works on servers (both HTTP and FTP) that support it.
Matching of wildcards and recursive mirroring of directories are available when retrieving via FTP.
Both HTTP and FTP retrievals can be time-stamped, thus Wget can see if the remote file has changed since
last retrieval and automatically retrieve the new version if it has.
Wget supports proxy servers, which can lighten the network load, speed up retrieval and provide access behind firewalls.
If you are behind a firewall that requires the use of a socks style gateway, you can get the socks library
and compile wget with support for socks.
____________________________________________________________________________________________________
So, und nun das Script....

@echo off
set "Programm=LoaDown 3.0.0 bY Ein-FTPServer"  
Title=%Programm%

:: (c) 2008-2011 by Markus Herkenrath Info@cced.de
:: **********************************************
:: ******        Konfiguration             ******
:: **********************************************


cls

:: // Hier werden alle Scriptvariablen  gesetzt //::
:: -------------------------------------------------

set ProgPath=%CD%\
set ProgDrive=%ProgPath:~,2%
set Tools="%ProgPath%ExtTools\"  
set Logfile="%ProgPath%LoaDown3.0.0.Log"  
set alt="%Temp%\DL.Log%"  
set neu="%Temp%\DL.Lst"  
set Bearbeite="C:\Windows\System32\Notepad.exe"  
set Temp="%Temp%\!LoadDown\"  
md "%Temp%\!LoadDown"  


if exist "%Temp%\lw.txt" del "%Temp%\lw.txt"  


:: // Hier werden alte daten gelöscht, sofern vorhanden //::
:: -------------------------------------------------

if exist %alt% del /Q /F %alt%
if exist %neu% del /Q /F %neu%



:: // Hier beginnt das eigentliche Script //::
:: -------------------------------------------------

if not exist config.ini. (
Set Farbe=A0 
echo Willkommen bei %Programm%
echo Keine Config.Ini gefunden.
echo Diese wird jetzt angelegt
goto MakeIni
) ELSE (
FOR /F "eol=;" %%i in ('find "10=" config.ini') do set logfile=%%i  
goto UseIni
)

:MakeIni

:: // Hier wird eine Config.Ini angelegt, sofern keine gefunden wurde. //::
:: -------------------------------------------------

:WRITEINI
Echo Write INI
cls
echo Speicher Deine Aenderungen und beende dann bitte Notepad
echo __________________________________________________________________________
echo. 
echo 1: Bitte passe die angegebenen Daten nach deinen Beduerfnissen an. 		>>"%ProgPath%"config.ini  
echo 2: Für alle Informationen die Sie nicht eintragen wollen, schreiben Sie bitte 	>>"%ProgPath%"config.ini  
echo 3: " Leer " in die Zeile.  	>>"%ProgPath%"config.ini  
echo.4: Bitte unbedingt die Zeilenzahl (z.B. 01=; bis 29=; stehen lassen) 		>>"%ProgPath%"config.ini  
echo 5: Bitte lesen Sie hinter der Zeilenzahl die Beschreibung		  		>>"%ProgPath%"config.ini  
echo 6: Am Anfang der Beschreibung stehen jeweils C: S: oder C+S: Die dazugehörigen	>>"%ProgPath%"config.ini  
echo 7: Werte sind entweder C: für Clients S: für Server C+S: für beide Module		>>"%ProgPath%"config.ini  
echo 8: ______________ die ersten 11 Zeilen können Sie loeschen ______________ 		>>"%ProgPath%"config.ini  
echo 9:   			>>"%ProgPath%"config.ini  
echo 10:   			>>"%ProgPath%"config.ini  
echo 11:_______________________________________________________________________		>>"%ProgPath%"config.ini  
echo Dein Pseudonym		01=;C+S: Hier dein Pseudonym (z.B. Die Anfangsbuchstaben deines Namens)>>"%ProgPath%"config.ini  
echo Ein-FTPServer.Info		02=;C:	 Hier der Name des FTP Servers (z.B. ftp.Ein-FTPServer.info)   	>>"%ProgPath%"config.ini  
echo FTP Loginname		03=;C:   Der FTP Loginname Mueller1234   	>>"%ProgPath%"config.ini  
echo FTP Passwort		04=;C:   Das FTP Passwort 1234gEhEiMabcd   >>"%ProgPath%"config.ini  
echo FTP Pfad		05=;C:   Und der Pfad aus dem geladen werden soll Abschließenden "\" nicht vergessen (z.B. /subdomains/down/httpdocs/) 	>>"%ProgPath%"config.ini  
echo Deine@EMailAdresse.de	06=;C+S: Ihre E-Mailadresse  		>>"%ProgPath%"config.ini  
echo SMTP-Login-Name		07=;C+S: SMTP Loginname (oft die E-Mailadresse)  >>"%ProgPath%"config.ini  
echo SMTP-Server.de		08=;C+S: Ihr SMTP Server  		>>"%ProgPath%"config.ini  
echo gEhEiM			09=;C+S: Ihr Mail Passwort  		>>"%ProgPath%"config.ini  
echo LogfileName		10=;C+S: z.B. Download.Log.  		>>"%ProgPath%"config.ini  
echo Logfilegroesse		11=;C+S: z.B. 30200 = 30 Kb ist völlig ausreichend.  		>>"%ProgPath%"config.ini  
echo ServerFile		12=;C+S: z.B. DL.LOG   			>>"%ProgPath%"config.ini  
echo Programmstatus		13=;C+S: Status: Wie soll das Programm laufen? Als Server=1, als Client=2 immer Fragen=3?>>"%ProgPath%"config.ini  
echo Auswahl			14=;C:   Welche Daten sollen gezogen werden? *.*. *.Rar, DateiName.Zip oder AUSWAHL Wobei dann hier eine Liste der Aktuellen Downloads angeboten wird. 	>>"%ProgPath%"config.ini  
echo Ziel			15=;C:   Wo sollen die Daten gespeichert werden? Abschließenden "\" nicht vergessen(z.B. C:\Downloads\) >>"%ProgPath%"config.ini  
echo 0C			16=;C:   Client Farbeinstellung  z.B. 1F testen mit CMD \ Color /?  >>"%ProgPath%"config.ini  
echo 0C			17=;S:   Server Farbeinstellung  z.B. 1F testen mit CMD \ Color /?  >>"%ProgPath%"config.ini  
echo Quelle.txt		18=;S:   Quelldatei aus der die Ladeverzeichnisse gelesen werden.  >>"%ProgPath%"config.ini	  
echo DataType.ini		19=;S:   Dateiname die Dateitypen (später mehr *.exe *.rar *.zip usw...) 			>>"%ProgPath%"config.ini  
echo C:\Downloads\		20=;S:   Pfad wo die fertigen Downloads hinverschoben werden sollen. (FTP / Webverzeichnis) 	>>"%ProgPath%"config.ini  
echo 1			21=;S:   1 = Kopieren oder 2 = Verschieben - Tragen Sie nur den Wert ein 			>>"%ProgPath%"config.ini  
echo 3			22=;S:   Tage, nach denen die Files vom DL Verzeichnis in ein "Old" Verzeichnis verschoben werden >>"%ProgPath%"config.ini  
echo 7			23=;S:   Tage, nach denen die Files aus dem "OLD" Verzeichnis endgültig gelöscht werden 		>>"%ProgPath%"config.ini  
echo D:\OLD_FileZ\		24=;S:   Pfad wo "alte" Files nach x Tagen hinverschoben werden sollen  >>"%ProgPath%"config.ini  
echo UserMail.Lst		25=;S:   Textdatei mit E-Mailadressen von Usern die über neue Downloads informiert werden sollen. >>"%ProgPath%"config.ini  
echo Neue_FileZ		26=;S:   Subject der Benachrichtigungs E-Mail. Bitte keine leerzeichen verwenden>>"%ProgPath%"config.ini  
echo MailFile		27=;S:   Dateiname Der Textdatei die den Inhalt der BenachrichtigungsMail enthält>>"%ProgPath%"config.ini  
echo 3			28=;S:   Soll der Admin über erfolgte Downloads benachrichtigt werden? 1=Ja 2=Nein 3=Fragen>>"%ProgPath%"config.ini  
echo info@Ein-FTPServer.de		29=;S:   Die E-Mailadresse des Admins >>"%ProgPath%"config.ini  
%Bearbeite% Config.ini


:: // Hier wird eine Config.Ini ausgelesen und die Werte in Variablen geschrieben. //::
:: -------------------------------------------------

:USEINI
Echo Use INI
%ProgDrive%
cd "%Progpath%"  
echo Config.Ini wird eingelesen....

FOR /F "eol=;" %%i in ('find "01=" config.ini') do set User=%%i  
FOR /F "eol=;" %%i in ('find "02=" config.ini') do set ftpsrv=%%i  
FOR /F "eol=;" %%i in ('find "03=" config.ini') do set ftpname=%%i  
FOR /F "eol=;" %%i in ('find "04=" config.ini') do set ftppw=%%i  
FOR /F "eol=;" %%i in ('find "05=" config.ini') do set ftppath=%%i  
FOR /F "eol=;" %%i in ('find "06=" config.ini') do set MyMail=%%i  
FOR /F "eol=;" %%i in ('find "07=" config.ini') do set MySMTPLogin=%%i  
FOR /F "eol=;" %%i in ('find "08=" config.ini') do set MyMailSrv=%%i  
FOR /F "eol=;" %%i in ('find "09=" config.ini') do set MyMailPW=%%i  
FOR /F "eol=;" %%i in ('find "10=" config.ini') do set Logfile=%%i  
FOR /F "eol=;" %%i in ('find "11=" config.ini') do set LogSize=%%i  
FOR /F "eol=;" %%i in ('find "12=" config.ini') do set Serverfile=%%i  
FOR /F "eol=;" %%i in ('find "13=" config.ini') do set Status=%%i  
FOR /F "eol=;" %%i in ('find "14=" config.ini') do set Data=%%i  
FOR /F "eol=;" %%i in ('find "15=" config.ini') do set Ziel=%%i  
FOR /F "eol=;" %%i in ('find "16=" config.ini') do set FarbeC=%%i  
FOR /F "eol=;" %%i in ('find "17=" config.ini') do set FarbeS=%%i  
FOR /F "eol=;" %%i in ('find "18=" config.ini') do set Quelle=%%i  
FOR /F "eol=;" %%i in ('find "19=" config.ini') do set DataType=%%i  
FOR /F "eol=;" %%i in ('find "20=" config.ini') do set UPLOAD=%%i  
FOR /F "eol=;" %%i in ('find "21=" config.ini') do set Type=%%i  
FOR /F "eol=;" %%i in ('find "22=" config.ini') do set MoveFile=%%i  
FOR /F "eol=;" %%i in ('find "23=" config.ini') do set KillFile=%%i  
FOR /F "eol=;" %%i in ('find "24=" config.ini') do set OldFiles=%%i  
FOR /F "eol=;" %%i in ('find "25=" config.ini') do set MailingLST=%%i  
FOR /F "eol=;" %%i in ('find "26=" config.ini') do set Subject=%%i  
FOR /F "eol=;" %%i in ('find "27=" config.ini') do set MailFile=%%i  
FOR /F "eol=;" %%i in ('find "28=" config.ini') do set InfoAdmin=%%i  
FOR /F "eol=;" %%i in ('find "29=" config.ini') do set AdminMail=%%i  
echo ____________________________________________________________________ >>%LOGFILE%
echo ! - %Date% - %Time%: Start von %ProgName%%Progvers% >>%LOGFILE%
echo ! - %Date% - %Time%: Config.ini ausgewertet >>%LOGFILE%
rem  cls
color %FarbeC%	
%Tools%Blat -install %MyMailSrv% %MyMail% >NUL


:: -----------------------------------------------------------------------------------------------------
::

if %Status% EQU 1 goto Server
if %Status% EQU 2 goto Client
if %Status% EQU 3 goto Fragen


:fragen
:: // In dieser Abfrage wird festgelegt, wie das Script weitergeführt wird (als Client oder als Server) //::
:: -------------------------------------------------

set "M=%temp%\Meldung.vbs"  
>%M% echo Set args=WScript.Arguments:WScript.Quit MsgBox(args(0),args(1),args(2))
 cscript //nologo %M% "Als Client starten =Ja - Als Server starten =Nein" 3 "Entscheidung"   
if errorlevel 7 echo OK & goto Server
if errorlevel 6 echo OK & goto client
if errorlevel 2 echo OK & goto Abbruch


:client
cls
Echo Client
:: // Hier wird der Client ausgeführt. //::
:: -------------------------------------------------

echo ! - %Date% - %Time%: Client gestartet >>%LOGFILE%
if %Data%==Auswahl goto DatenListe
echo ! - %Date% - %Time%: Parameter fuer Daten:%Data% und fuer Ziel:%Ziel% wurden uebernommen. >>%LOGFILE%
set ftpdata=ftp://%ftpname%:%ftppw%@%ftpsrv%%ftppath%
echo ! - %Date% - %Time%: FTPDaten: ftp://%ftpname%:gEhEiM@%ftpsrv%/%ftppath%  >>%LOGFILE%
echo +++ Teste auf neue Files
echo.
echo.
echo.
echo %Data% wird geholt und nach "%Ziel%" gespeichert  
echo _______________________________________________
echo.
	echo.
	echo %Date% - %Time% es sind neue Daten vorhanden.
	echo  Moment bitte......
	echo.
	echo wscript.sleep 2000>"%temp%\sleep.vbs"  
		wscript "%temp%\sleep.vbs"  
        cls
	%Tools%wget -nc -c -P"%Ziel%"  %ftpdata%%Data%  
	echo ! - %Date% - %Time%: Download beendet: %Zeile% wurde nach %Ziel% gespeichert. >>%LOGFILE%
	cls
	goto ende
	
:DATENLISTE
Echo Datenliste

:: // Hier wird die Liste mit neuen Downloads vom FTP Server heruntergeladen. //::
:: -------------------------------------------------

echo ! - %Date% - %Time%: Liste aktueller Files wird gezogen >>%LOGFILE%
set ftpdata=ftp://%ftpname%:%ftppw%@%ftpsrv%%ftppath%
%tools%wget -c -P"%Temp%"  "%ftpdata%%ServerFile%"  
echo. 
echo 1:Loeschen Sie die Dateinamen, die Sie NICHT downloaden wollen aus der Liste. >%neu%
echo 2:Hinterlassen Sie dabei aber bitte KEINE leeren Zeilen. >>%neu%
echo 3:Die ersten 5 Zeilen dieser Datei bitte auch nicht aendern. >>%neu%
echo 4:______________________________________________________________________________ >>%neu%
echo. >>%neu%
type "%Temp%\dl.log" >>%neu%  
for /f "skip=19 usebackq delims=" %%i in (%Alt%) do call :ProcessLine "%%i"  
goto LADELISTE

:PROCESSLINE
set "Zeile=%~1"  

::ab 35. Buchstaben ausgeben
(echo %Zeile:~35%)>>"%Neu%"  
goto :eof

:LADELISTE
echo Ladeliste
echo ! - %Date% - %Time%: %neu% wurde erzeugt >>%LOGFILE%
%Bearbeite% %neu%
for /f "skip=5 usebackq delims=" %%i in (%Neu%) do call :ProcessLine1 "%%i"  
goto InfoAdmin

:PROCESSLINE1
set "Zeile=%~1"  
%Tools%wget -c -P"%Ziel%"  %ftpdata%%Zeile%  
goto Ausgabe

:AUSGABE
echo ! - %Date% - %Time%: Download beendet: %Zeile% wurde nach %Ziel% gespeichert.>>%LOGFILE%
if %InfoAdmin% NEQ 2 echo ! - %Date% - %Time%: Download beendet: %Zeile% wurde nach "%Ziel%" gespeichert.>>%Temp%\IA.mail  
del "%neu%"  
goto :eof

:InfoAdmin
if %InfoAdmin% EQU 1 goto IAJa
if %InfoAdmin% EQU 2 goto end
if %InfoAdmin% EQU 3 goto Quest

:IAJa
echo ! - %Date% - %Time%: InfoMail wird automatisch an den Admin geschickt.>>%LOGFILE%
@%Tools%blat "%Temp%\IA.mail" -from %User% -U %MyMail% -pw %MyMailPW% -to %AdminMail% -subject "%User% hat Downloads fertig" >NUL  
del "%Temp%\IA.mail"  
 goto end

:Quest
set M="%temp%\"Meldung.vbs  
>%M% echo Set args=WScript.Arguments:WScript.Quit MsgBox(args(0),args(1),args(2))
cscript //nologo %M% "Soll dem Admin eine InfoMail geschickt werden?" 3 "Entscheidung"  
if errorlevel 7 echo OK & goto end
if errorlevel 6 echo OK & goto ms
if errorlevel 2 echo OK & goto Abbruch

:ms
echo ! - %Date% - %Time%: InfoMail wird nach Abfrage an den Admin geschickt.>>%LOGFILE%
@%Tools%blat "%Temp%\IA.mail" -from %User% -U %MyMail% -pw %MyMailPW% -to %AdminMail% -subject "%User% hat Downloads fertig" >NUL  
del "%Temp%\IA.mail"  
goto end

:SYNTAX
color A0
cls
echo Hilfe zu LoadDown %ProgVers%
echo ________________________
echo.
echo Syntax:
echo Der Parameter "?" + "-?" oder "/?" - Zeigt diese Hilfe  
echo Der Parameter "Auswahl" oder "/Auswahl" zeigt eine Liste aktueller Downloads, die Ausgewaehlt werden koennen  
echo.
echo Weitere Parameter sind: "*.*", "*.Rar" oder "Datei.Name"  
echo Beispiel 1: LoaDown107.exe /Auswahl
echo Beispiel 2: LoaDown107.exe *.* C:\Downloads
echo Beispiel 3: LoaDown107.exe *.Rar C:\Downloads
echo Beispiel 4: LoaDown107.exe DateiName.Zip Q:\Laden
echo.
echo Ausserdem kann beim ersten Start ab Version %ProgVers% eine Configdatei mit einigen Parametern erstellt werden.
echo In der Config.Ini duerfen Sie die ersten 6 Zeilen NICHT veraendern.
echo In Zeile 7 wird der Standartparameter fuer die Dateiauswahl festgehalten z.B. Auswahl oder *.*
echo In Zeile 8 wird der Zielort definiert, wo die geladenen Daten gespeichert werden sollen.
echo.
echo So, und nun viel Spass und Erfolg.
echo Weitere neue Versionen kommen sicherlich in kuerze.

goto Abbruch

:Abbruch
Pause
cls
set M=%temp%\Meldung.vbs
>%M% echo Set args=WScript.Arguments:WScript.Quit MsgBox(args(0),args(1),args(2))
cscript //nologo %M% "Programm wurde abgebrochen.! Schade.." 0 "Entscheidung"  
if errorlevel 1 goto end

set M=%temp%\Meldung.vbs
Pause
>%M% echo Set args=WScript.Arguments:WScript.Quit MsgBox(args(0),args(1),args(2))
cscript //nologo %M% "Download von %Zeile% ist fertig.Danke fr die Benutzung des Scripts. !" 0 "Entscheidung"  
if errorlevel 1 echo xxx >NUL
echo ! - %Date% - %Time%: Programmende >>%LOGFILE%
goto end

:: // Hier wird der Server ausgeführt //::
:: -------------------------------------------------
:: -------------------------------------------------
:: -------------------------------------------------
:: -------------------------------------------------
:: -------------------------------------------------
:: -------------------------------------------------
:: -------------------------------------------------
:SERVER
echo ! - %Date% - %Time%: %ProgName% %Progvers% wurde im Servermodus gestartet >>%LOGFILE%
echo ! - %Date% - %Time%: Jetzt wird sauber gemacht
echo ! - %Date% - %Time%: Verschiebe Files „lter als %MOVEFILE% Tage nach %Oldfiles%
echo ! - %Date% - %Time%: Jetzt wird sauber gemacht >%SLOGFILE%
echo ! - %Date% - %Time%: Verschiebe Files „lter als %MOVEFILE% Tage nach %Oldfiles% >>%SLOGFILE%
echo wscript.sleep 4000>%temp%\sleep.vbs
  		wscript %temp%\sleep.vbs

cls

"%Tools%delAge32" %Upload%\*.* %Movefile% /move "%OLDFILES%"  
echo "%Tools%delAge32" %Upload%\*.* %Movefile% /move "%OLDFILES%"  

 color %FarbeS%
cls
:: // Hier wird geprüft, ob die Server.Ini vorhanden ist. //::
if not exist "%ProgPath%"SConfig.ini goto SCmakeini  
If not exist "%ProgPath%"SConfig.ini set Farbe=1F  

if exist "%ProgPath%"SConfig.ini FOR /F "eol=;" %%i in ('find "12=" SConfig.ini') do set Farbe=%%i  


If not exist SConfig.Ini set SLOGFILE="%ProgPath%"LoaDown3.0-Server.Log  
if exist SConfig.ini FOR /F "eol=;" %%i in ('find "09=" SConfig.ini') do set SLOGFILE=%%i  
echo ! -_________________________________________________________ >>%SLOGFILE%
echo ! - %Date% - %Time%: %Programm% gestartet >>%SLOGFILE%
echo ! - %Date% - %Time%: %Programm% gestartet

:SCmakeini
if exist SCONFIG.INI goto USERSCINI
if exist NoSCINI.000 del NoSCINI.000

set M=%temp%\Meldung.vbs
>%M% echo Set args=WScript.Arguments:WScript.Quit MsgBox(args(0),args(1),args(2))
cscript //nologo %M% "Soll eine ServerConfig.Ini angelegt werden?" 3 "Entscheidung"  
if errorlevel 7 echo Keine .Ini Anlegen. Wenn doch die Datei NoSCINI.000 Loeschen.>NoSCINI.000. & goto :abfrage
if errorlevel 6 goto writeSCini
if errorlevel 2 echo Abbruch ... & goto Abbruch
goto SetSCStandart

:WRITESCINI
If not exist SConfig.Ini set SLOGFILE="%ProgPath%"LoaDown3.0-Server.Log  
if exist SConfig.ini FOR /F "eol=;" %%i in ('find "09=" SConfig.ini') do set SLOGFILE=%%i  
echo ! - %Date% - %Time%: Server Ini wird geschrieben >>%LOGFILE%
echo ! - %Date% - %Time%: Server Ini wird geschrieben

IF Not EXIST SConfig.ini Set SLOGFILE="%ProgPath%"LoaDown3.0-Server.Log  
if exist SConfig.ini FOR /F "eol=;" %%i in ('find "9=" SConfig.ini') do set SLogfile=%%i  
echo ! - %Date% - %Time%: SConfig.Ini wurde erzeugt >>%LOGFILE%
echo ! - %Date% - %Time%: %Progname% %Progvers% Server gestartet  >>%LOGFILE%
echo Speichern Sie Ihre aenderungen und beenden Sie dann bitte Notepad
echo __________________________________________________________________________
echo.

IF Not EXIST SConfig.ini Set SLOGFILE=SreverLoaDown%Progvers%.Log
if exist SConfig.ini FOR /F "eol=;" %%i in ('find "9=" SConfig.ini') do set SLogfile=%%i  
echo ! - %Date% - %Time%: SConfig.Ini wurde erzeugt >>%SLOGFILE%
echo ! - %Date% - %Time%: %Progname% %Progvers% Server gestartet  >>%SLOGFILE%
echo Speichern Sie Ihre aenderungen und beenden Sie dann bitte Notepad
echo __________________________________________________________________________
echo.
echo 1: Bitte passen Sie die angegebenen Daten nach Ihren Beduerfnissen an. >Sconfig.ini
echo 2: Sie koennen alternativ auch die SConfig.ini loeschen. Dann werden Sie >>Sconfig.ini
echo 3: jedes mal nach den Informationen gefragt. (Zu viel Arbeit) >>Sconfig.ini
echo.4: Bitte unbedingt die Zeilenzahl (z.B. 07= oder 08= stehen lassen) >>Sconfig.ini
echo 5: ______________ die ersten 6 Zeilen bitte nicht loeschen ______________ >>Sconfig.ini
echo 6:  >>SConfig.ini
echo Quelle.txt			07=; Quelldatei aus der die Ladeverzeichnisse gelesen werden.>>Sconfig.ini	
echo H:\!Testfuer107\		08=; Pfad wo die fertigen Daten hinverschoben werden sollen.>>Sconfig.ini
echo LoaDown3.0-Server.Log	09=; Wie soll das Logfile heißen? Mit oder ohne Pfadangabe>>Sconfig.ini
echo 500000			10=; z.B. 30200 = 30 KB	>>Sconfig.ini>>Sconfig.ini
echo 1				11=; 1 = Kopieren oder 2 = Verschieben - Tragen Sie nur die Zahl ein>>Sconfig.ini
echo 4E				12=; z.B. 1F testen mit CMD \ Color /?>>Sconfig.ini
echo DL.log			13=; MailFile: Wie soll die Datei heißen, die an "Downloader" Versandt wird?>>Sconfig.ini  
echo 3				14=; Tage, nach denen die Files vom DL Verzeichnis in ein "Old" Verzeichnis verschoben werden>>Sconfig.ini  
echo 7				15=; Tage, nach denen die Files aus dem "OLD" Verzeichnis endgültig gelöscht werden>>Sconfig.ini  
echo UserMail.Lst		16=; Textdatei mit E-Mailadressen von Usern die über neue Downloads informiert werden sollen.>>Sconfig.ini
echo H:\!Testfuer107\OLD\	17=; Pfad wo "alte" Files nach x Tagen hinverschoben werden sollen>>Sconfig.ini  
echo Ihre@EMailAdresse.de	18=; Ihre E-Mailadresse>>Sconfig.ini
echo SMTPLogin-Name		19=; SMTP Loginname (oft die E-Mailadresse)>>Sconfig.ini
echo SMTP-Server.de		20=; Ihr SMTP Server>>Sconfig.ini
echo gEhEiM			21=; Ihr Mail Passwort>>Sconfig.ini
echo Neue_Downloads_verfügbar	22=; Subject der Benachrichtigungs E-Mail. Bitte keine leerzeichen verwenden>>Sconfig.ini
echo DataType.ini		23=; Dateiname die Dateitypen (später mehr *.exe *.rar *.zip usw...)>>Sconfig.ini
echo LangerHans			24=; Ihr Admin Pseudonym)>>Sconfig.ini

%Bearbeite% SConfig.ini

goto USERSCINI

:USERSCINI
echo ! - %Date% - %Time%: SConfig.Ini wird ausgelesen >>%SLOGFILE%
echo ! - %Date% - %Time%: SConfig.Ini wird ausgelesen
FOR /F "eol=;" %%i in ('find "07=" SConfig.ini') do set Quelle=%%i  
FOR /F "eol=;" %%i in ('find "08=" SConfig.ini') do set UPLOAD=%%i  
FOR /F "eol=;" %%i in ('find "09=" SConfig.ini') do set SLOGFILE=%%i  
FOR /F "eol=;" %%i in ('find "10=" SConfig.ini') do set SLogSize=%%i  
FOR /F "eol=;" %%i in ('find "11=" SConfig.ini') do set Type=%%i  
FOR /F "eol=;" %%i in ('find "12=" SConfig.ini') do set Farbe=%%i  
FOR /F "eol=;" %%i in ('find "13=" SConfig.ini') do set MailFile=%%i  
FOR /F "eol=;" %%i in ('find "14=" SConfig.ini') do set MoveFile=%%i  
FOR /F "eol=;" %%i in ('find "15=" SConfig.ini') do set KillFile=%%i  
FOR /F "eol=;" %%i in ('find "16=" SConfig.ini') do set MailingLST=%%i  
FOR /F "eol=;" %%i in ('find "17=" SConfig.ini') do set OldFiles=%%i  
FOR /F "eol=;" %%i in ('find "18=" SConfig.ini') do set MyMail=%%i  
FOR /F "eol=;" %%i in ('find "19=" SConfig.ini') do set MySMTPLogin=%%i  
FOR /F "eol=;" %%i in ('find "20=" SConfig.ini') do set MyMailSrv=%%i  
FOR /F "eol=;" %%i in ('find "21=" SConfig.ini') do set MyMailPW=%%i  
FOR /F "eol=;" %%i in ('find "22=" SConfig.ini') do set Subject=%%i  
FOR /F "eol=;" %%i in ('find "23=" SConfig.ini') do set DataType=%%i  
FOR /F "eol=;" %%i in ('find "24=" SConfig.ini') do set Admin=%%i  
FOR /F "eol=;" %%i in ('find "25=" SConfig.ini') do set FBal=%%i  
set "SLOG="%ProgPath%"%SLOGFILE%"  
set "%SLOGFILE%="%ProgPath%"%SLOG%"  
color %Farbe%

If not exist SConfig.Ini set SLOGFILE="%ProgPath%"LoaDown3.0-Server.Log  
if exist SConfig.ini FOR /F "eol=;" %%i in ('find "09=" SConfig.ini') do set SLOGFILE=%%i  

if not exist %Quelle% goto WriteQuelle
goto DoMove

:WriteQuelle

echo ! - %Date% - %Time%: Keine Quellen vorhanden. Quelldatei wird erstellt >>%SLOGFILE%
echo ! - %Date% - %Time%: Keine Quellen vorhanden. Quelldatei wird erstellt
FOR /F "eol=;" %%i in ('find "07=" SConfig.ini') do set Quelle=%%i  
if exist %Quelle% goto DoMove

if not exist %Quelle%  echo 1: Bitte passen Sie die angegebenen Daten nach Ihren Beduerfnissen an. >>%Quelle%
echo 2: Hier dürfen Sie in jeder Zeile nur einen Pfad eintragen, aus dem Daten >>%Quelle%
echo 3: ausgelesen und in ein neues Verzeichnis verschoben werden sollen. >>%Quelle%
echo.4: Vergessen sie Bitte den abschließenden "\" nicht. (z.B. Ihre Fertigen Downloads) >>%Quelle%  
echo.5: Bitte unbedingt die Zeilenzahl (z.B. 08= oder 09= stehen lassen) >>%Quelle%
echo 6: ______________ die ersten 6 Zeilen bitte nicht loeschen ______________ >>%Quelle%
echo 7:  >>%Quelle%
echo C:\Downloads\	08=;Quelle aus der die Daten kopiert / verschoben werden sollen. >>%Quelle%
echo D:\Meine_Daten\	09=;s.O. oder Wenn Slot nicht benutzt wird das Wort "leer" eintragen.>>%Quelle%	  
echo E:\Beruf\Geheim\	10=;s.O. oder Wenn Slot nicht benutzt wird das Wort "leer" eintragen.>>%Quelle%	  
echo leer		11=;s.O. oder Wenn Slot nicht benutzt wird das Wort "leer" eintragen.>>%Quelle%	  
echo leer 		12=;Wenn Slot nicht benutzt wird das Wort "leer" eintragen.>>%Quelle%	  
echo leer		13=;Wenn Slot nicht benutzt wird das Wort "leer" eintragen.>>%Quelle%	  
echo leer		14=;Wenn Slot nicht benutzt wird das Wort "leer" eintragen.>>%Quelle%		  
echo leer		15=;Wenn Slot nicht benutzt wird das Wort "leer" eintragen.>>%Quelle%		  
echo leer		16=;Wenn Slot nicht benutzt wird das Wort "leer" eintragen.>>%Quelle%		  
echo leer		17=;Wenn Slot nicht benutzt wird das Wort "leer" eintragen.>>%Quelle%		  
%Bearbeite% %Quelle%

rem USERSCINI
if not exist "%ProgPath%"SConfig.ini set SLogSize=500000  
FOR /F "eol=;" %%i in ('find "10=" SConfig.ini') do set SLogSize=%%i  

:: Hier wird das Logfile gekürzt
for %%i in (*.Log) do if %%~zi geq %SLogSize% del %SLOGFILE%
goto DoMove

:DoMove

echo ! - %Date% - %Time%: %Quelle% wird ausgelesen >>%SLOGFILE%
echo ! - %Date% - %Time%: %Quelle% wird ausgelesen

FOR /F "eol=;" %%i in ('find "08=" %Quelle%') do set Target1=%%i  
FOR /F "eol=;" %%i in ('find "09=" %Quelle%') do set Target2=%%i  
FOR /F "eol=;" %%i in ('find "10=" %Quelle%') do set Target3=%%i  
FOR /F "eol=;" %%i in ('find "11=" %Quelle%') do set Target4=%%i  
FOR /F "eol=;" %%i in ('find "12=" %Quelle%') do set Target5=%%i  
FOR /F "eol=;" %%i in ('find "13=" %Quelle%') do set Target6=%%i  
FOR /F "eol=;" %%i in ('find "14=" %Quelle%') do set Target7=%%i  
FOR /F "eol=;" %%i in ('find "15=" %Quelle%') do set Target8=%%i  
FOR /F "eol=;" %%i in ('find "16=" %Quelle%') do set Target9=%%i  
FOR /F "eol=;" %%i in ('find "17=" %Quelle%') do set Target10=%%i  

:PacknGo

Set Info="%temp%\list.txt"  
FOR /F "eol=;" %%i in ('find "08=" %Quelle%') do set StartDIR=%%i  

	if /i #%Target1%# neq #leer# DIR /B /AD %Target1%>%info% 
	for /f "usebackq delims=" %%i in (%info%) do call :ProcessLine-!UT "%%i"  

goto MailSend
	
:PROCESSLINE-!UT
 set "Drive=%Startdir:~,2%"  
 %Drive%
 cd %StartDIR%
 set Ordner=%~1
 cd "%Ordner%"  



  	if exist *.!UT ( 
  	 cd %startdir%   	
 	 goto :eof)

 	 "%ProgramFiles%\7-Zip\7z.exe" a -tzip -mx0 -r "%Ordner%.zip"   
          echo ! - %Date% - %Time%: %Ordner%.zip erstellt.>>%SLOG%
          Robocopy "%startdir%%ordner%"  "%Upload%" "%Ordner%.*" %RCPYParam%  

          echo 1>%Startdir%%Ordner%\!Erledigt.DoNot.!UT
          echo 1 %Startdir%%Ordner%\!Erledigt.DoNot.!UT
          echo ! - %Date% - %Time%: %Ordner%.zip nach %Upload% verschoben.>>%SLOG%


%ProgDrive%
cd "%ProgPath%"  
		"%tools%NewRename.exe" "%Upload%\%Ordner%.zip"  
		del %info%	
		Echo Neue Daten verfuegbar>""%ProgPath%"NewFile.Dat"  
		goto :eof
 	
:MailSend
%ProgDrive%
cd "%ProgPath%"  
echo ! - %Date% - %Time%: MailSent gestartet.>>%SLOG%
cls
if not exist ""%ProgPath%"NewFile.Dat" goto Ordnung  
if exist ""%ProgPath%"NewFile.Dat" del ""%ProgPath%"NewFile.Dat"  
set "InFile=%Upload%\!DL.Log"  
set "OutFile=%Upload%\DL.Log"  
echo ! - %Date% - %Time%: teste auf Content.txt >>%SLOG%
if exist ""%ProgPath%"Content.txt" goto MailIt  

Echo Hallo, >""%ProgPath%"Content.txt"  
echo.  >>""%ProgPath%"Content.txt"  
Echo Es liegen neue Downloads auf dem Server.>>""%ProgPath%"Content.txt"  
Echo Bei Interesse bitte schnellst moeglich ziehen.>>""%ProgPath%"Content.txt"  
Echo Nach %MOVEFILE% Tagen werden die Daten automatisch nach %OLDFILES% verschoben.>>""%ProgPath%"Content.txt"  
Echo Nach %KILLFILE% Tagen werden Sie automatisch gelöscht. >>""%ProgPath%"Content.txt"  
Echo Benutze bitte die dir bekannten FTP Zugangsdaten oder benutze LoaDown 3.0.0>>""%ProgPath%"Content.txt"  
Echo bzw. frag mich danach.>>""%ProgPath%"Content.txt"  
Echo Zur Zeit liegen folgende Dateien bereit:>>""%ProgPath%"Content.txt"  
Echo. >>""%ProgPath%"Content.txt"  
Echo %Admin% >>""%ProgPath%"Content.txt"  
Echo. >>""%ProgPath%"Content.txt"  
Echo ____________________________________________________________>>""%ProgPath%"Content.txt"  
echo.  >>""%ProgPath%"Content.txt"  
echo  Folgende Files liegen zur Zeit bereit:>>""%ProgPath%"Content.txt"  
Echo ____________________________________________________________>>""%ProgPath%"Content.txt"  
goto MailIt

:MailIT
if exist ""%ProgPath%"%Mailinglst%" goto MailIt2  
echo ! - %Date% - %Time%: Mailingliste wird erstellt. >>%SLOG%
if not exist ""%ProgPath%"%Mailinglst%" echo 1: Du musst die ersten 5 Zeilen aus dieser Datei loeschen!!!.>"%ProgPath%"%Mailinglst%  
echo 2: In diese Datei (%Mailinglst%) schreiben Sie bitte alle E-Mailempfänger,>>"%ProgPath%"%Mailinglst%  
echo 3: die Sie informieren möchten, wenn neue Dateien zur verfügung stehen >>"%ProgPath%"%Mailinglst%  
echo 4: Sie können beliebig viele Empfänger per Komma getrennt eintragen. >>"%ProgPath%"%Mailinglst%  
Echo 5: ____________________________________________________________>>"%ProgPath%"%Mailinglst%  
Echo info@Ein-FTPServer.de,ich@hier.de,test@user.de,Bill@gates.com >>"%ProgPath%"%Mailinglst%  
%Bearbeite% "%ProgPath%"%Mailinglst%  


:MailIt2
%ProgDrive%
cd "%ProgPath%"  
::DL.Log erstellen
set "DLP=%Upload%\"  
if exist %DLP%dl.log del %DLP%dl.log
dir "%dlp%"/B >"%dlp%!DL.Log"  
for /f "tokens=1* delims=:" %%i in ('findstr /n $ "%InFile%"^|findstr /b "1:"') do findstr /v /b /c:"%%j" "%InFile%">"%DLP%DL.Log"  
type "%DLP%DL.Log">>""%ProgPath%"Content.txt"  
setlocal
set "InputFile="%ProgPath%"CNT.txt"  
set "OutputFile="%ProgPath%"content.txt"  

"%tools%\diskuse.exe" /d:w /w /t /v %Upload% >"%InputFile%"  


(echo.
 echo.

 echo Datum       Dateiname                                          Groesse in Bytes
 echo -------------------------------------------------------------------------------


 for /f "skip=8 tokens=2* delims=:" %%a in ('findstr "^" "%InputFile%"') do (  
   for /f "tokens=1" %%i in ("%%a") do (  
     set "String=%%i"  
     call :ConcatString 12 0
   )

   for /f "tokens=*" %%i in ("%%b") do (  
     set "String=%%~nxi"  
     call :ConcatString 51 0
   )

   for /f "tokens=*" %%i in ("%%b") do (  
     set "String=%%~zi"  
     call :ConcatString 16 1
   )

   call :OutputLine
 )
) >>"%OutputFile%"  

del %InFile%
del %Inputfile%

echo ! - %Date% - %Time%: Mailtext wird erstellt >>%SLOG%
echo ! - %Date% - %Time%: InfoMail wird Versandt >>%SLOG%
echo ! - InfoMail wird Versandt
echo ! - %Date% - %Time%: Untersuche %Upload%>>%SLOG%
echo ! - Untersuche %Upload%\
echo %Upload% >%Temp%\LW.txt
FOR /F "tokens=1 delims=\ " %%i in (%Temp%\lw.txt) do set LW=%%i  
%ProgLW%
cd "%ProgPath%"  

"%tools%blat.exe" ""%ProgPath%"Content.txt" -from %MyMail% -U %MySMTPLogin% -pw %MyMailPW% -to %MyMail% -bf "%ProgPath%"%Mailinglst% -subject "%Subject%"?  
echo Mail verschickt!

if errorlevel=0 echo ! - %Date% - %Time%: Mail wurde erfolgreich versandt >>%SLOG%
echo wscript.sleep 5000>%temp%\sleep.vbs
		wscript %temp%\sleep.vbs
del ""%ProgPath%"Content.txt"  
Echo if exist ""%ProgPath%"\%Mailinglst% goto Ordnung  
goto Ordnung


:Ordnung
Echo Ordnung
cd "%ProgPath%"  
del %Outputfile%

echo ! - %Date% - %Time%: Loesche Files „lter als %KillFile% Tage aus %Oldfiles% >>%SLOG%
echo ! - %Date% - %Time%: Folgende Files wurden geloescht >>%SLOG%

"%tools%\delAge32" %Oldfiles%\*.* %Killfile%  
if exist ""%ProgPath%"\NewFile.Dat". (  
 if exist ""%ProgPath%"\NewFile.Dat" del ""%ProgPath%"\NewFile.Dat"  
 if exist ""%ProgPath%"Content.txt" del ""%ProgPath%"Content.txt"  

goto end
) ELSE (
goto end2
)

:end2
echo ! - %Date% - %Time%: Keine neuen Files gefunden >>%SLOG%
echo.
echo Keine Files zum verschieben/Loeschen gefunden gefunden.
echo.
if exist newfile.dat del newfile.dat
goto end
:end

:: // Hier werden abschließende Aufräumarbeiten durchgeführt und das Script beendet. //::
:: -------------------------------------------------
echo Hier werden abschließende Aufräumarbeiten durchgeführt und das Script beendet
if exist %alt% del %alt%
if exist %neu% del %neu%
if exist "%temp%\%ServerFile%" del /Q /F "%temp%\%ServerFile%"  
if exist "%temp%\Meldung.vbs" del /Q /F "%temp%\Meldung.vbs"  

echo ! - %Date% - %Time%: Programmende >>%LOGFILE%
cls
echo ! - %Date% - %Time%: Durchlauf beendet >>%LOGFILE%
echo.
echo.
echo.
echo Vielen Dank fr die Benutzung von LoaDown  3.0
echo Alle Vorg„nge sind beendet
echo Bei Anregungen oder Problemen Mail an: LoaDown@Ein-FTPServer.de
echo.
echo.
echo.
echo wscript.sleep 4000>%temp%\sleep.vbs
 		wscript %temp%\sleep.vbs

:: HIER WIRD DAS SCRIPT BEENDET !!

Exit /b

:ConcatString
  >"%TEMP%\strlen.txt" <NUL (set /p "=<%String%"&echo.&set /p "=<"&echo.)  
  for /f "delims=:" %%l in ('findstr /o /b "<" "%TEMP%\strlen.txt"') do set /a "nSpaces=%1-(%%l-3)"  
  del "%TEMP%\strlen.txt"  

  setlocal enabledelayedexpansion
  set "Space="  
  for /l %%z in (1,1,%nSpaces%) do set "Space=!Space! "  
  endlocal & set "Space=%Space%"  

  if "%2" equ "0" set "Line=%Line%%String%%Space%"  
  if "%2" equ "1" set "Line=%Line%%Space%%String%"  
Exit /b

:OutputLine
  for %%s in ("%Line%") do echo %%~s  
  set "Line="  

Exit /b
Biber
Biber 18.06.2011 um 20:55:35 Uhr
Goto Top
Wow, CCED,

vielen Dank auch dir für deine Mühen!

Vorhin hatte ich es zwischendurch schon bereut, meinen OffTopic-Kommentar hier abgestellt zu haben, weil sich Friemler wohl ein bisschen an den Ei^H^H an der Ehre gepackt fühlte,

Jetzt allerdings, wenn ich überlege, dass der Beitrag ohne meinen Zwischenruf wohl um 14:40h beendet gewesen wäre...

--> So gefällt es mir wesentlich besser.

Ich werde eine entsprechende Bewertung vergeben.

Schönes Wochenende auch dir
Biber

P.S. Wochenendskripter wie du sind hier auf Herzlichste willkommen. face-wink
cced-de
cced-de 18.06.2011 um 21:01:11 Uhr
Goto Top
Danke und auch euch alles ein schönes Wochenende!!

Aber einen Grünen Haken sehe ich leider nirgends!! Sorry
Friemler
Friemler 18.06.2011 um 21:43:36 Uhr
Goto Top
Hallo CCED,

auch von mir: Respect!

Ein Script von ca. 700 Zeilen zu schreiben und dabei den Überblick über die verschiedenen Ablaufpfade zu behalten ist schon eine reife Leistung für einen "Wochenendscripter". Du benutzt auch öfter fortgeschrittenere Techniken (z.B. FOR-Schleifen, Inline-VBScript). Auch wenn es da noch die eine oder andere Möglichkeit zur Optimierung gäbe - das sind eher Kleinigkeiten, die der Erwähnung nicht wirklich Wert sind oder zwar die Anzahl der Zeilen verringern aber nicht unbedingt die Verständlichkeit erhöhen würden.

Und das wichtigste ist: Deine Frage war für mich die größte Herausforderung hier im Forumsbereich "Batch & Shell" in den letzten zwei bis drei Wochen, deshalb werde ich (zum ersten mal überhaupt) auch eine entsprechende Bewertung vergeben.

Den "grünen Haken" hat wohl Biber schon gesetzt, jedenfalls ist er vorhanden. Um das selbst zu erledigen, musst Du unter Deinem Beitrag auf "Bearbeiten" klicken, bis ans Ende der Seite scrollen und den Haken bei "Diese Frage gilt als gelöst" setzen.


@Biber:
Auch wenn es evtl. anders rübergekommen ist - ich war zu keinem Zeitpunkt irgendwie ungehalten bzgl. Deines Kommentars, da braucht Dir nichts leid tun.


Schönes WE an alle
Friemler