motorcross
Goto Top

Batch Alle .txt Dateien per Batch Script als verschiedene Variablen speichern

Hallo Administratoren,

ich bin gerade dabei einen Batch Script zu schreiben, leider komme ich nicht weiter.
Dieser Batch Script soll den Inhalt aller .txt Dateien im Ordner als verschiedene Variablen speichern.
Leider weiß man nicht den Namen der .txt Dateien und man weiß auch nicht wie viele es sind.
Es sollte dann so funktionieren: z.B die Datei test.txt (normal weiß man den Namen ja nicht) unter einer Variablen gespeichert wird
Ich brauche diesen Script für einen Server, der sieht wie viele Clients online sind.
Die .txt Dateien tragen den Namen der Clients.
Über Hilfe würde ich mich freuen!
Gruß Motorcross

Content-Key: 155535

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

Printed on: April 23, 2024 at 06:04 o'clock

Member: AliceD
AliceD Nov 22, 2010 at 13:04:39 (UTC)
Goto Top
versuch es mal mit

"for /f "delims=" %%a in ('D:*.txt') do echo %%a && %%b" etc. jenachdem wie viele Wörter auf einer linie stehen. (Bei D: dann halt den Pfad wo deine txt Dateien liegen

anstatt do echo kannst du dann aber auch set befehle nutzen jenach dem was du mit den variablen machen möchtes
Member: Motorcross
Motorcross Nov 22, 2010 at 13:18:02 (UTC)
Goto Top
habe ich versucht aber er findet den Pfad nicht.
Also ich erkläre nochmal mein Problem:
Ich bin gerade dabei einen Server zu programmieren, der die Clients überprüft.
Wenn sich ein Client angemeldet hat, erstellt er im Ordner test eine Datei, die so heißt, wie der Computername.
In dieser Datei steht die Uhrzeit drin, wann sich der Client verbindet hat.
Diese wird (wenn der Client noch online ist jede 5 Sekunden durch ihn aktualisiert.
Jetzt möchte ich mir einen Übersichtsscript programmieren, der sich aus jeder Datei die Uhrzeit ansieht, mit der aktuellen vergleicht und wenn sie übereinstimmen, den Namen des Clients anzeigt.(Der befindet sich ja im Namen der .txt Datei).
Hier ein Bsp.:
Die Datei heißt z.B HORST-PC.txt
Drin steht: 14:17
Wie kann man das programmieren?
Gruß Motrocross
Member: bastla
bastla Nov 22, 2010 at 16:06:25 (UTC)
Goto Top
Hallo Motorcross!

Sollte (ungetestet) so zu machen sein:
@echo off & setlocal
set "Jetzt=%time:~,5%"  
for /f "delims=" %%i in ('findstr /m "%Jetzt%" D:\*.txt') do @echo %%~ni  
Grüße
bastla
Member: Biber
Biber Nov 22, 2010 at 17:14:05 (UTC)
Goto Top
Moin Motorcross, moin bastla,

Würde ich in diesem Fall sowohl anders angehen als von Motorcross geplant wie auch anders als von bastla skizziert.

@Motorcross:
Was interessiert dich, was die Clients für eine Uhrzeit haben? Wenn einer deiner Clients aus Mexiko oder Hawaii zugeschaltet ist, dann ist es bei ihm Stunden früher oder später als bei dir.

@bastla
Aber auch wenn alle Clients in Leverkusen-Mitte (bzw. in derselben Zeitzone) stünden - die funken doch nur alle 5 Minute ihren Lebe-noch-Status.
Also würdest du mit dem findstr /m "%Jetzt%" auch nur die erwischen, die gerade eben "Beim nächsten Ton des Zeitzeichens ist es JETZT" geschrieben haben.

Also, hülft ja nix... ich muss a) alle vom heutigen Tach erwischen und b) will ich davon nur die sehen von jetzt() im Sinne von [hh:mm] und jetzt()-5minuten [hh.mm]

Skizze:
...
:: Eine SachMirWasVor5MinutenWar-VBScript-Zeile temporär ins %Temp%-Verzeichnis schreiben
echo >%temp%{backslash}nowMinus5Min.vbs d=dateadd("n",-5, now()): Wscript.echo (hour(d) ^&":"^& minute(d) )  
:: die gibt zurück "17:45", wenn es 17:50h ist  
For /F %%i in ('cScript //NoLogo %temp%{backslash}nowMinus5Min.vbs') do Set minTime=%%i"  
:: jetzt steht der String "17:45" in der Variable %minTime%  
:: Und jetzt erst kommt die eigentliche Arbeitszeile:
FOR %%i in (' X:{backslash}WoDieClientSchreiben{backslash}*.txt') do @echo %%~ti|findstr "%date%" >nul && if "%%~ti" GTR "%date% %minTime%" @echo %%~ni %%~ti  

  • so werden alle Client-Minitextdateien abgegriffen.
  • und zwar wie mit impliziten "DIR /Tw" == letzter Schreibzugriff
  • diese Zeit steht [mit Datum] im Format TT:MM.JJJJ hh.mm" in %%~ti == dem Filedatum
  • alle mit heutigem Datum holt mit der FindStr %date%
  • und alle Größer als 5 Minuten mach ich zu Fuss mit dem "IF GTR ...%minTime%"

Ist weder schnell noch ästhetisch, aber sollte fliegen.
[Edit] Sobald die Backslashes auch wieder angezeigt werden! Wassn das für ein Montachsbullshit??!?[/Edit]

Grüße
Biber

[Edit II @bastla]
Hast ja recht -- jetzt hab ich mir wieder eine Montachs-Doppelpackung geholt...
Hätte ich einfach "Sekunden" gelesen wo auch "Sekunden" standen...*grmpf*
Dann hätte ich das ~*%@@§§-neue Feature mit Knick-mir-die-BackSlashes-in-Nordrichtung gar nicht bemerkt.


back-to-top@Moderator: bitte Kommentar löschen

[Edit II}
Member: bastla
bastla Nov 22, 2010 at 17:15:45 (UTC)
Goto Top
@Biber
die funken doch nur alle 5 Minute ihren Lebe-noch-Status.
Motocross hatte aber behauptet alle 5 Sekunden ...

... ansonsten hätte ich natürlich auch zu VBS gegriffen ...

Grüße
bastla

[Edit] Backslash-Workaraound: verdoppeln (hatten wir jetzt schon ein paar Tage so) [/Edit]