Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Bestimme Logfiles kopieren, entpacken via Batch-Datei

Frage Entwicklung Batch & Shell

Mitglied: Attituder

Attituder (Level 1) - Jetzt verbinden

13.10.2008, aktualisiert 24.10.2008, 5424 Aufrufe, 22 Kommentare

Hallo,

mit Hilfe der Suche bin ich leider auf keinen Lösungsansatz gestossen.

EINLEITUNG:

In Einem Firmennetzwerk werden von bestimmten Clients Logfiles angelegt. Diese werden auf den Server unter dem festgelegten Ordner des Clients gespeichert. In diesem Clientordner habe ich 2 Ordner in dem sich die Logfiles in gepackter Form befinden. Einmal den Hauptordner und einen Ablageordner. Im Hauptordner befinden sich die Logfiles der letzten 7 Tage. Logfiles die älter als 7 Tage sind, werden automatisch in den Überordner "Ablage" verschoben. Die Logfiles werden täglich angelegt und besitzen z.B. den Dateinamen "20081013_logfile.txt.zip"


PROBLEM:

Ich suche eine Möglichkeit, so dass ich Logfiles eines bestimmten Zeitraums z.B. von 01.10.-10.10.2008 anhand des Dateinamens in ein bestimmtes Verzeichnis kopieren kann und darauffolgend diese entpackt und die Zip-Dateien löscht, so dass ich nur noch in diesen gesammelten Verzeichnis der Clients die txt-Dateien vorliegen habe um eine Auswertung der Logfiles mehrerer Clients von einem bestimmten Zeitraum vornehmen zu können.


Für jeden Lösungsansatz bin ich sehr Dankbar!
Mitglied: bastla
13.10.2008 um 15:48 Uhr
Hallo Attituder!

So ganz klar ist mir die Struktur nicht - einerseits sollen sich "Hauptordner" und "Ablageordner" im "Clientordner" befinden, andererseits bezeichnest Du den "Ablageordner" als Überordner ... (Ich nehme einmal an, dass sich beide Ordner unterhalb des "Clientordners" befinden.)

Soferne das "bestimmte Verzeichnis" (in welches die Logs entpackt werden sollen) das Ziel für alle Logs aus dem angegebenen Zeitraum sein soll, wäre noch zu klären, wie ein Überschreiben der Logs eines vorher behandelten Clients vermieden werden kann. Eine Möglichkeit wäre, den Namen des "Clientordners" an den Dateinamen anzufügen (siehe Batch).

Da Du kein (Ent-)Packprogramm erwähnt hast, verwende ich zum Testen "7za.exe", die Standalone-Commandline-Version von "7-zip" (Download) mit dem Speicherort "C:\Scripts".

Auf Basis der getroffenen Annahmen könnte der Batch dann so aussehen:
01.
@echo off & setlocal 
02.
set "Von=20081001" 
03.
set "Bis=20081010" 
04.
 
05.
set "Postfix=_logfile.txt.zip" 
06.
set "Basis=D:\Logs" 
07.
set "Sammel=D:\SelectedLogs" 
08.
 
09.
set "UnZIP=C:\Scripts\7za.exe" 
10.
 
11.
if not exist "%Sammel%" md "%Sammel%" 
12.
del /q "%Sammel%" 
13.
for /d %%v in ("%Basis%\*.*") do ( 
14.
    echo Bearbeite Client: %%v 
15.
    for /f %%i in ('dir /s /b /a-d "%%v\20??????%Postfix%" 2^>nul') do ( 
16.
        echo Pruefe Log: %%~ni 
17.
        if "%%~nxi" geq "%Von%%PostFix%" if "%%~nxi" leq "%Bis%%PostFix%" ( 
18.
            echo #Entpacke Log: %%~ni 
19.
            "%UnZIP%" e -y "%%i" -o"%Sammel%" >nul 
20.
            if exist "%Sammel%\%%~ni" for /f %%a in ("%%~ni") do ren "%Sammel%\%%~ni" %%~na-%%~nxv%%~xa" 
21.
22.
23.
)
Der Sammelordner wird, falls noch nicht vorhanden, erstellt und jeweils beim Start gelöscht.

Grüße
bastla
Bitte warten ..
Mitglied: Attituder
13.10.2008 um 17:02 Uhr
Danke für Deine schnelle Antwort. Funktioniert soweit wunderbar!

Zu Deiner Frage:

Im Clientordner z.B. PC01 befinden sich die Logfiles der letzten 7 Tage inkl. des Ordners "Ablage".

Leider bin ich noch auf ein kleines Problem gestoßen. Es müsste noch eine Funktion behinhalten, dass er den Wochentag "Sonntag" nicht beachtet. Sozusagen innerhalb dieses festgelegten Zeitraums nur 6 Tage kopiert und entpackt. Falls das noch irgendwie zu lösen ist, bin ich wunschlos glücklich!
Bitte warten ..
Mitglied: Biber
13.10.2008 um 18:23 Uhr
Moin Attituder,

bei diesem Sonntags-Problem würde ich mich gar nicht lange über die Unzulänglichkeiten von M$-Batchen oder die Unfähigkeit der Redmonder PraktikantInnen ärgern, sondern das unaufwändig wie folgt lösen:

  • lege Dir eine Textdatei "Sonntage.txt" mit den Sonntagsdatumswerten im ANSI-Format (yyyymmdd) an (Zeitbedarf dafür 3 Minuten):
..... 
20081005 
20081012 
20081019 
20081026 
....
  • bastla hat irgendwo eine kryptische IF-Bedingung "[if "%%~nxi" geq "%Von%%PostFix%"....]
  • vor dieses IF-Konstrukt in dieselbe Zeile noch
find "%%~nxi" F:\FesterFad\Sonntage.txt>nul || [IF-bedingung gemäß bastla...]
Statt F:\FesterFad natürlich den Pfad, unter dem Deine Sonntage-Datei liegt.
Gratis-Zusatzfeature: Außer Sonntagen kannst Du dort auch Weihnachten, Vinxten und Merkels Geburtstag eintragen, also alle Tage, an denen nicht gearbeitet wird.

[ Anmerkung: Eventuell ist es einfacher, nur die Tage einzutragen, an denen gearbeitet wird...
Dann die Find-logik von "||" in "&&" umändern.]


P.S. Und falls bastla Dir da lieber eine VBS-Lösung anschnacken will: einfach ignorieren *g

Grüße
Biber
Bitte warten ..
Mitglied: bastla
13.10.2008 um 20:15 Uhr
@Biber
... falls bastla Dir da lieber eine VBS-Lösung anschnacken will ...
Wie kommst Du denn auf derart Abwegiges?

Grüße
bastla
Bitte warten ..
Mitglied: Biber
13.10.2008 um 20:25 Uhr
@bastla
Wie kommst Du denn auf derart Abwegiges?
Man/frau weiss ja nie, was so im Kopf eines Skripters vorgeht...

Grüße
Biber
Bitte warten ..
Mitglied: bastla
13.10.2008 um 22:02 Uhr
@Biber
Man/frau weiss ja nie, was so im Kopf eines Skripters vorgeht...
Ist wohl auch besser so ...

Würdest Du übrigens Batcher unter Skripter subsumieren?

Grüße
bastla
Bitte warten ..
Mitglied: Attituder
14.10.2008 um 08:14 Uhr
[ Anmerkung: Eventuell ist es einfacher, nur die Tage einzutragen, an
denen gearbeitet wird...
Dann die Find-logik von "||" in "&&"
umändern.]

Aber dazu müsste ich doch alle Arbeitstage in eine extra txt-Datei eintragen, oder?
Bitte warten ..
Mitglied: bastla
14.10.2008 um 08:18 Uhr
Hallo Attituder!

Aber dazu müsste ich doch alle Arbeitstage in eine extra txt-Datei eintragen, oder?
Ja, wenn Ihr soviel arbeitet ...

Die Variante mit Sonntagen wird dann wohl vorzuziehen sein, wobei Du die Liste zB mit Excel ja ganz schnell hinbekommen kannst.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
14.10.2008 um 08:34 Uhr
Aber dazu müsste ich doch alle Arbeitstage in eine extra txt-Datei eintragen, oder?
Jepp, und die Sinnhaftigkeit ist abhängig davon, ob in den 365 Tagen eines Jahres mehr als die Hälfte Arbeitstage oder Nicht-Arbeitstage sind.

Wenn es nur um 52 Sonntage und 20 Feiertage pro Jahr geht
--> dann sind sind freie Tage mit 72 von 365 eindeutig die Ausnahme (so genannte Arbeitnehmer-Sicht).

[ Aus Arbeitgeber-Sicht würde allerdings sicherlich nahegelegt werden, mal eben nur die paar Arbeitstage einzutragen - die meiste Zeit hast Du ja eh frei.
[365 Tage a 24 Stunden hat das Jahr, davon werden nur 8 Stunden, also ein Drittel gearbeitet.
--> Netto also ca 365/3 = 122 Tage AUFgerundet.
Abzüglich 52 Sonntage --> bleiben 70 Tage
Abzüglich 20 gesetzliche Feiertage --> bleiben 50 Tage.
Abzüglich 30 Tage Urlaub --> bleiben 20 Tage.
Abzüglich 3 Tage frei für Umzug, Beerdigungen, Hochzeit und sonstige Vergnügungen-> bleiben 17 Tage.
Abzüglich 10 Tage für Schulung und Fortbildung. --> bleiben 7 Tage.
Und die 7 Arbeitstage kannst Du doch eben mal in der Mittagspause in so eine Textdatei eintippseln, oder nicht?]

Grüße
Biber
Bitte warten ..
Mitglied: Attituder
14.10.2008 um 08:42 Uhr
Habe das gerade mit den Sonntage.txt ausprobiert. Nur leider funktioniert das irgendwie nicht .

Mir ist noch ein zusätzliches Feature eingefallen was sicherlich zu lösen ist. Die Zeitspanne, die ich in der Batch-Datei angeben kann ist es doch sicherlich auch möglich diese Zeitspanne in eine externe-Datei reinzuschreiben, die dann wieder von dieser Batch-Datei ausgelesen wird?
Bitte warten ..
Mitglied: Biber
14.10.2008 um 09:23 Uhr
Zitat von Attituder:
Habe das gerade mit den Sonntage.txt ausprobiert. Nur leider
funktioniert das irgendwie nicht .

Hmm, könnte mit diesen Sonnenflecken zusammenhängen...
Oder vielleicht zu feiner Sand...?
Evtl. kann ich genauer raten, wenn ich das jetzige Skript sehe..

Mir ist noch ein zusätzliches Feature eingefallen was sicherlich
zu lösen ist. Die Zeitspanne, die ich in der Batch-Datei angeben
kann ist es doch sicherlich auch möglich diese Zeitspanne in eine
externe-Datei reinzuschreiben, die dann wieder von dieser Batch-Datei
ausgelesen wird?
Dazu die beiden Zeilen
Von=20081001 
Bis=20081010
in eine Datei LogFileUnzip.ini schreiben und im Batch mit dieser Zeile einlesen.
For /f  "delims=" %%i in (LogFileunzip.ini) do Set "%%i"
Grüße
Biber
Bitte warten ..
Mitglied: Attituder
14.10.2008 um 09:35 Uhr
Funktioniert wunderbar, danke!

hier die batch-file:

01.
@echo off & setlocal 
02.
For /f  "delims=" %%i in (LogFileunzip.ini) do Set "%%i" 
03.
 
04.
set "Postfix=_logfile.txt.zip" 
05.
set "Basis=I:\Logfiles" 
06.
set "Sammel=I:\SelectedLogs" 
07.
 
08.
set "UnZIP=I:\batch\7za.exe" 
09.
 
10.
if not exist "%Sammel%" md "%Sammel%" 
11.
del /q "%Sammel%" 
12.
for /d %%v in ("%Basis%\*.*") do ( 
13.
    echo Bearbeite Client: %%v 
14.
    for /f %%i in ('dir /s /b /a-d "%%v\20??????%Postfix%" 2^>nul') do ( 
15.
        echo Pruefe Log: %%~ni 
16.
        find "%%~nxi" I:\batch\Sonntage.txt>nul || if "%%~nxi" geq "%Von%%PostFix%" if "%%~nxi" leq "%Bis%%PostFix%" ( 
17.
            echo #Entpacke Log: %%~ni 
18.
            "%UnZIP%" e -y "%%i" -o"%Sammel%" >nul 
19.
            if exist "%Sammel%\%%~ni" for /f %%a in ("%%~ni") do ren "%Sammel%\%%~ni" %%~na-%%~nxv%%~xa" 
20.
21.
22.
)
Bitte warten ..
Mitglied: bastla
14.10.2008 um 10:24 Uhr
Hallo Attituder!

Da in der "Sonntagsliste" nur das Datum, im Dateinamen aber auch noch der Zusatz "_logfile.txt.zip" enthalten ist, muss der Name zunächst noch zerlegt werden:
01.
@echo off & setlocal 
02.
 
03.
set "Ini=I:\Logfiles\LogFileunzip.ini" 
04.
set "Basis=I:\Logfiles" 
05.
set "Sammel=I:\SelectedLogs" 
06.
set "Postfix=_logfile.txt.zip" 
07.
 
08.
set "UnZIP=I:\batch\7za.exe" 
09.
set "Sonntage=I:\batch\Sonntage.txt" 
10.
 
11.
For /f "usebackq delims=" %%i in ("%Ini%") do Set "%%i" 
12.
if not exist "%Sammel%" md "%Sammel%" 
13.
del /q "%Sammel%" 
14.
for /d %%v in ("%Basis%\*.*") do ( 
15.
    echo Bearbeite Client: %%v 
16.
    for /f %%i in ('dir /s /b /a-d "%%v\20??????%Postfix%" 2^>nul') do ( 
17.
        echo Pruefe Log: %%~ni 
18.
        for /f "delims=_" %%d in ("%%~nxi") do find "%%d" "%Sonntage%">nul || if "%%~nxi" geq "%Von%%PostFix%" if "%%~nxi" leq "%Bis%%PostFix%" ( 
19.
            echo #Entpacke Log: %%~ni 
20.
            "%UnZIP%" e -y "%%i" -o"%Sammel%" >nul 
21.
            if exist "%Sammel%\%%~ni" for /f %%a in ("%%~ni") do ren "%Sammel%\%%~ni" %%~na-%%~nxv%%~xa" 
22.
23.
24.
)
Bei dieser Gelegenheit habe ich auch gleich Variablen für die beiden Dateien "LogFileunzip.ini" (diesen Pfad musst Du noch anpassen) und "Sonntage.txt" verwendet - macht's etwas änderungsfreundlicher.

Grüße
bastla

P.S.: Bitte verwende in Zukunft für das Posten von Batches entsprechende Tags.
Bitte warten ..
Mitglied: Attituder
14.10.2008 um 11:31 Uhr
Besten Dank! Funktioniert nun einwandfrei!
Bitte warten ..
Mitglied: Attituder
14.10.2008 um 16:27 Uhr
Mir ist noch was spezifisches eingefallen...

Folgende Situation:

Die Batch-Datei ist ja momentan so aufgebaut, dass sie "alle" Logs im Ordner durchsucht und dementsprechend in einen Ordner sammelt. Ich habe die Logs nun so geändert, dass sie folgendenden Dateinamen vorweisen: 20081014_Logfiles_PC01.txt.zip usw.

Nun ist es so, dass ich vorhabe Logfiles bestimmter Clients in einen bestimmten Ordner zu sammeln und nicht wie bisher in einen gemeinsamen Ordner. Nun stellt sich sicherlich die Frage, warum?

Die Clients befinden sich in verschiedenen Abteilungen: Grafik, Buchhaltung etc. Mit diesem zusätlichen Feature is es ja möglich die Logfiles der Clients in den dementsprechenden "Abteilungsordner" zu sammeln um diese dann auszuwerten.

Eine Batch-File zum auswerten hab ich schon programmiert. In jedem dieser Abteilungsordner wird nach Ausführung dieser Batch-File eine Result.txt erstellt.

Ich bin nur noch nicht auf eine Lösung gekommen, diese Result.txt in den verschiedenen Abteilungsordnern zu einer txt-Datei zusammenzufassen um somit ein Endresultat aller Abteilungen zu erhalten.

Desweiteren wurde hier das Problem mit den Sonntagen mit einer Ini-File gelöst. Diese Lösung hätte ich auch gerne in meiner Auswertungs-Batch-File, so dass ich in der Ini-File angeben kann, nach welchem Suchbegriff er die Logfiles auslesen soll.

Vielen Dank schonmal im vorraus.

MfG
Attituder
Bitte warten ..
Mitglied: bastla
14.10.2008 um 22:31 Uhr
Hallo Attituder!

Zum Aufteilen der einzelnen Client-Logs in die entsprechenden Ordner benötigst Du eine Zuordnung (sinnvoller Weise wieder als Textdatei, zB "Abteilungen.txt") zwischen Client und Abteilung, also etwa
PC01:Grafik 
PC02:Grafik 
PC03:Buchhaltung 
...
Der "Entpack- und Verteil-"Batch könnte dann so aussehen:
01.
@echo off & setlocal 
02.
 
03.
set "Ini=I:\Logfiles\LogFileunzip.ini" 
04.
set "Basis=I:\Logfiles" 
05.
set "Postfix=_Logfiles_*.txt.zip" 
06.
set "AbtBasis=I:\LogsAbteilungen" 
07.
 
08.
set "UnZIP=I:\batch\7za.exe" 
09.
set "Sonntage=I:\batch\Sonntage.txt" 
10.
set "Abteilungen=I:\batch\Abteilungen.txt" 
11.
 
12.
for /f "usebackq delims=" %%i in ("%Ini%") do Set "%%i" 
13.
if exist "%AbtBasis%" rd /s /q "%AbtBasis%" 
14.
for /d %%v in ("%Basis%\*.*") do ( 
15.
    echo Bearbeite Client: %%~nxv 
16.
    for /f %%i in ('dir /s /b /a-d "%%v\20??????%Postfix%" 2^>nul') do ( 
17.
        echo Pruefe Log: %%~ni 
18.
        for /f "tokens=1,3 delims=_." %%d in ("%%~nxi") do ( 
19.
            find "%%d" "%Sonntage%">nul || if "%%d" geq "%Von%" if "%%d" leq "%Bis%" ( 
20.
                echo Gefunden Log: %%d_%%e 
21.
                for /f "tokens=2 delims=:" %%a in ('findstr /i "%%e:" "%Abteilungen%"') do ( 
22.
                    echo #Entpacke nach: %%a 
23.
                    "%UnZIP%" e -y "%%i" -o"%AbtBasis%\%%a" >nul 
24.
25.
26.
27.
28.
)
Der vormalige Ordner %Sammel% ist hier ersetzt durch den Ordner %AbtBasis%, wobei dieser Ordner zunächst entfernt (um alte Werte zu eliminieren) und dann durch das Entpacken bei Bedarf automatisch für jede Abteilung neu erstellt wird.
Ich bin nur noch nicht auf eine Lösung gekommen, diese Result.txt in den verschiedenen Abteilungsordnern zu einer txt-Datei zusammenzufassen um somit ein Endresultat aller Abteilungen zu erhalten.
Wenn tatsächlich alle "Result.txt" in eine Datei sollen, lässt sich das relativ einfach realisieren:
01.
@echo off & setlocal 
02.
set "AbtBasis=I:\LogsAbteilungen" 
03.
set "Einzel=Result.txt" 
04.
set "Gesamt=I:\LogsAbteilungen\Gesamt.txt" 
05.
 
06.
if exist "%Gesamt%" del "%Gesamt%" 
07.
for /f "delims=" %%i in ('dir /s /b /a-d "%AbtBasis%\%Einzel%"') do type "%%i">>"%Gesamt%
Desweiteren wurde hier das Problem mit den Sonntagen mit einer Ini-File gelöst. Diese Lösung hätte ich auch gerne in meiner Auswertungs-Batch-File, so dass ich in der Ini-File angeben kann, nach welchem Suchbegriff er die Logfiles auslesen soll.
Dazu wäre es sinnvoll, zunächst den Auswertungs-Batch zu posten.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
15.10.2008 um 08:30 Uhr
@Attituder & bastla
Dazu wäre es sinnvoll, zunächst den Auswertungs-Batch zu posten.
Noch sinnvoller wäre es danach, Dein (fast) gelöstes Problem und die sich abzeichnende Musterlösung nochmals -bereinigt um ein paar Herantastversuche in diesem Thread- als Tutorial im Bereich "Batch & Shell" bereitzustellen.

Könntest Du, @Attituder, Dich dieser Aufgabe bei Gelegenheit annehmen?

Ich empfinde jedenfalls diese Batch-Lösung als echtes Praxis-Beispiel eine Bereicherung für dieses Forum.

Grüße
Biber
Bitte warten ..
Mitglied: Attituder
16.10.2008 um 16:20 Uhr
Kann ich gerne machen.

Anbei hier meine Batch-Datei, was mir ehrlich gesagt ein bisschen peinlich ist, da ich in sachen Batch nicht viel Erfahrungen habe was sicherlich auch sehr gut zu erkennen ist und sich manche Programmierer die Haare raufen werden ;). Aber diese Batch-Datei erfüllt Ihren Sinn und Zweck.

01.
set "search=SUCHBEGRIFF" 
02.
copy *.txt GESAMT.txt 
03.
find ("%search%") GESAMT.txt > FILE.txt 
04.
del GESAMT.txt 
05.
find " 08:" FILE.txt > 08.txt  
06.
find " 09:" FILE.txt > 09.txt 
07.
find " 10:" FILE.txt > 10.txt  
08.
find " 11:" FILE.txt > 11.txt  
09.
find " 12:" FILE.txt > 12.txt  
10.
find " 13:" FILE.txt > 13.txt  
11.
find " 14:" FILE.txt > 14.txt  
12.
find " 15:" FILE.txt > 15.txt  
13.
find " 16:" FILE.txt > 16.txt  
14.
find " 17:" FILE.txt > 17.txt  
15.
find " 18:" FILE.txt > 18.txt  
16.
find " 19:" FILE.txt > 19.txt  
17.
copy 08.txt+09.txt+10.txt+11.txt+12.txt+13.txt+14.txt+15.txt+16.txt+17.txt+18.txt+19.txt ANZAHL.txt 
18.
del 0*.txt 
19.
del 1*.txt 
20.
del FILE.txt 
21.
find /c ("%search%") ANZAHL.txt > RESULT.txt 
22.
del ANZAHL.txt 
23.
result.txt
Die Datei wird hierbei innerhalb des Verzeichnisses der jeweiligen Abteilung ausgeführt. Es werden die Daten mit dem "Suchbegriff" gesammelt von 08-20 Uhr.

Das derzeitige Problem ist, das sich hierbei die Datei in "jedem" Abteilungsverzeichnis befinden muss und das ich jede Datei wieder einzeln bearbeiten müsste, wenn ich nach einem anderem Suchbegriff suchen möchte.

Danke nochmal für Eure Hilfe!
Bitte warten ..
Mitglied: bastla
22.10.2008 um 13:12 Uhr
Hallo Attituder!

Soferne ich das richtig interpretiere, zählt Dein Batch die Anzahl der Vorkommen von "SUCHBEGRIFF" im Zeitraum 08:00:00 bis 19:59:59 innerhalb aller .txt-Dateien und schreibt das Ergebnis in "result.txt".

Etwas knapper (und mit leicht veränderter Ergebnisdarstellung) ließe sich das etwa so formulieren:
01.
@echo off & setlocal 
02.
set "search=SUCHBEGRIFF" 
03.
set T=Daten 
04.
if exist %T% del %T% 
05.
for %%i in (08 09 10 11 12 13 14 15 16 17 18 19) do findstr /c:" %%i:" *.txt>>%T% 
06.
for /f "tokens=2 delims=:" %%i in ('find /c "%search%" %T%') do >RESULT.txt echo %search%:%%i  
07.
result.txt 
08.
del %T%
Ganz klar ist mir allerdings noch nicht, welches Ziel Du genau anstrebst. Soll in jedem Abteilungsunterordner eine "result.txt" erstellt werden, oder möchtest Du alle Anzahlen in einer einzigen Datei zusammenfasssen?

Grüße
bastla
Bitte warten ..
Mitglied: Attituder
24.10.2008 um 08:23 Uhr
Es soll ja in jedem Abteilungsordner nach dem gleichen Suchbegriff gesucht werden. Von daher habe ich das momentan so gelöst, dass in jedem Abteilungsordner diese Batch-Datei vorhanden ist und ausgeführt wird.

Das Problem was ich habe ist, dass wenn ich nach einem neuen Suchbegriff suchen will ich in jedem Abteilungsordner die Batch-Datei von Hand ändern müsste. Von daher wäre eine Lösung wo ich den Suchbegriff in einer Datei angeben kann und diese dann von allen Batch-Dateien innerhalb des Abteilungsordners ausgelesen wird von Vorteil.

Letztendlich sollen am Schluss in einer Text-Datei der Name des Abteilungsordners + zusätzlich die gefundene Anzahl des Suchbegriffes innerhalb des festgelegten Zeitraums angezeigt werden.
Bitte warten ..
Mitglied: bastla
24.10.2008 um 16:16 Uhr
Hallo Attituder!

Da ich noch immer nicht genau weiß, ob nun die einzelnen "result.txt" in den Abteilungsordnern erwünscht sind oder nicht, erstellt der folgende Batch sowohl diese Dateien als auch eine Datei mit der Zusammenfassung der Einzelergebnisse:
01.
@echo off & setlocal 
02.
set "search=SUCHBEGRIFF" 
03.
set "AbtBasis=I:\LogsAbteilungen" 
04.
set "Gesamt=I:\LogsAbteilungen\Gesamt.txt" 
05.
 
06.
set "Einzel=Result.txt" 
07.
set "T=Daten.tmp" 
08.
if exist "%Gesamt%" del "%Gesamt%" 
09.
for /d %%v in ("%AbtBasis%\*.*") do ( 
10.
    pushd "%%v" 
11.
    if exist "%T%" del "%T%" 
12.
    if exist "%Einzel%" del "%Einzel%" 
13.
    for %%i in (08 09 10 11 12 13 14 15 16 17 18 19) do findstr /c:" %%i:" *.txt>>"%T%" 
14.
    for /f "tokens=2 delims=:" %%i in ('find /c "%search%" "%T%"') do ( 
15.
        >"%Einzel%" echo %search%:%%i 
16.
        >>"%Gesamt%" echo %%~nxv:%%i 
17.
18.
    del "%T%" 
19.
20.
popd 
21.
"%Gesamt%"
Die letzte Zeile dient der sofortigen Anzeige des Ergebnisses im Editor und kann natürlich ersatzlos gestrichen werden.

Um den Suchbegriff einer Datei entnehmen zu können, kannst Du die Zeile
set "search=SUCHBEGRIFF"
auf
set /p search=<"I:\AbteilungsLogs\Suchbegriff.txt"
ändern.

Grüße
bastla
Bitte warten ..
Mitglied: Attituder
24.10.2008 um 22:07 Uhr
Genauso habe ich mir das vorgestellt. Ein Traum! Funktioniert wunderbar.

Danke für alles bastla!
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Ä in batch Datei (12)

Frage von BergEnte zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (15)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...