77575
19.07.2013
4202
8
0
Den Inhalt einer Datei komplett als Variable
Hallo,
ich möchte den komppletten Inhalt einer Textdatei als Variable setzen.
mit set /p wird aber nur die erste Zeile verwendet.
Hintergrund ist das ich mit eventcreate einen Eventlog eintrag erzeugen möchte der im Beschreibungsfeld den gesamten Text der Datei enthält. Leider kann ich bei eventcreate keine Datei angeben sondern nur einen String.
.z. Bsp.
set /P TEXT=<c:\temp\test.txt
eventcreate /d "%TEXT%" /t information /id 111111
gruss 01
ich möchte den komppletten Inhalt einer Textdatei als Variable setzen.
mit set /p wird aber nur die erste Zeile verwendet.
Hintergrund ist das ich mit eventcreate einen Eventlog eintrag erzeugen möchte der im Beschreibungsfeld den gesamten Text der Datei enthält. Leider kann ich bei eventcreate keine Datei angeben sondern nur einen String.
.z. Bsp.
set /P TEXT=<c:\temp\test.txt
eventcreate /d "%TEXT%" /t information /id 111111
gruss 01
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 211970
Url: https://administrator.de/forum/den-inhalt-einer-datei-komplett-als-variable-211970.html
Ausgedruckt am: 23.12.2024 um 11:12 Uhr
8 Kommentare
Neuester Kommentar
Hallo,
für eventcreate lässt sich kein Dateizeiger übergeben.
Alles muss in eine Kommandozeile passen, die jedenfalls kürzer ist als die maximale Batch-String-Länge von 8191 Zeichen.
lg
für eventcreate lässt sich kein Dateizeiger übergeben.
Alles muss in eine Kommandozeile passen, die jedenfalls kürzer ist als die maximale Batch-String-Länge von 8191 Zeichen.
lg
Hallo 01-01-01,
mal abgesehen von Endoros Einwand wegen der Stringlänge - Ich habe noch nie eine mehrzeilige Eventbeschreibung gesehen. Natürlich wird eine zu lange Zeile in der Ereignisanzeige automatisch umgebrochen. Das hat aber nichts damit zu tun, dass dort Zeilenumbrüche im Text hinterlegt wären.
Ergo: Schreib die gesamte Beschreibung gleich in eine Zeile der Textdatei, dann kannst du sie auch vernünftig auslesen und von mir aus in eine Variable packen ...
Grüße
rubberman
mal abgesehen von Endoros Einwand wegen der Stringlänge - Ich habe noch nie eine mehrzeilige Eventbeschreibung gesehen. Natürlich wird eine zu lange Zeile in der Ereignisanzeige automatisch umgebrochen. Das hat aber nichts damit zu tun, dass dort Zeilenumbrüche im Text hinterlegt wären.
Ergo: Schreib die gesamte Beschreibung gleich in eine Zeile der Textdatei, dann kannst du sie auch vernünftig auslesen und von mir aus in eine Variable packen ...
Grüße
rubberman
Hallo,
Ansonsten kannst du noch mit VB.NET eine Console Anwendung erstellen die mit der Eventlog Klasse die Datei in eine Variable einließt und dann den String in Eventlog einträgt.
Du brauchst ein StreamReader (System.IO), und ein EventLog (ich glaube^^) (System.Diagnostic). Dann könntest du das Programm nach C:\Windows\System32 Kopieren und dann kannst du es wie ein normales CMD Syntax nutzen.
Und der Einwand mit den Zeilenumbrüchen, den habe ich auch schon gesehen, dieser ist aber earscheinlich ehr kulturell bedingt, weil es Technisch zumindest möglich ist (ich habe es mit einer VB.NET GUI getestet). Alerdings ist da bitte auch noch der umstand zu beachten das die WriteLogEntry Sub oder jede andere Parameter übergabe keine Zeilenumbrüche unsterstützt. Da muss man dann z.B. wie in meinen Fall mit vbNewLine Arbeiten. Aber möglich ist es.
LG, Herbrich
Ansonsten kannst du noch mit VB.NET eine Console Anwendung erstellen die mit der Eventlog Klasse die Datei in eine Variable einließt und dann den String in Eventlog einträgt.
Du brauchst ein StreamReader (System.IO), und ein EventLog (ich glaube^^) (System.Diagnostic). Dann könntest du das Programm nach C:\Windows\System32 Kopieren und dann kannst du es wie ein normales CMD Syntax nutzen.
Und der Einwand mit den Zeilenumbrüchen, den habe ich auch schon gesehen, dieser ist aber earscheinlich ehr kulturell bedingt, weil es Technisch zumindest möglich ist (ich habe es mit einer VB.NET GUI getestet). Alerdings ist da bitte auch noch der umstand zu beachten das die WriteLogEntry Sub oder jede andere Parameter übergabe keine Zeilenumbrüche unsterstützt. Da muss man dann z.B. wie in meinen Fall mit vbNewLine Arbeiten. Aber möglich ist es.
LG, Herbrich
Hallo.
Möglich ist das auch mit Batch-Bordmitteln und dem EVENTCREATE Tool. Aber schön wird das nicht und fehleranfällig (insbesondere bei der von Endoro angesprochenen maximalen Stringlänge) wird das auch. Ich kann's ja mal vorturnen, letztlich aber immer noch davon abraten ...
Grüße
rubberman
Möglich ist das auch mit Batch-Bordmitteln und dem EVENTCREATE Tool. Aber schön wird das nicht und fehleranfällig (insbesondere bei der von Endoro angesprochenen maximalen Stringlänge) wird das auch. Ich kann's ja mal vorturnen, letztlich aber immer noch davon abraten ...
@echo off &setlocal
REM Deine temporäre Datei. (anpassen)
set "file=test.txt"
REM Aktuelle OEM Codepage zwischenspeichern.
for /f "tokens=2 delims=:" %%i in ('chcp') do set /a "oemcp = %%~ni"
REM Codepage auf Windows-1252 stellen, um Umlaute korrekt übergeben zu können.
>nul chcp 1252
REM Datei erstellen. Bei etwa 8100 Byte Dateigröße wäre übrigens Schluss mit lustig, da die Gesamtlänge der Kommandozeile sonst 8191 Zeichen überschreitet.
REM (Du verarbeitest natürlich deine bestehende Datei und schmeißt diesen Block raus! Nur für mich zum Testen ...)
>"%file%" (
echo \"Benutzerdefiniertes Ereignis\".
echo(
echo Mit
echo Zeilenumbrüchen
echo für
echo Testzwecke!
)
REM Carriage Return
for /f %%i in ('copy /z "%~f0" nul') do set "cr=%%i"
REM Line Feed (Die zwei Leerzeilen danach sind relevant!)
set lf=^
REM Verzögerte Variablenerweiterung, um den Text zusammen zu bauen und mit Zeilenumbrüchen arbeiten zu können.
setlocal EnableDelayedExpansion
REM Datei einlesen und einen Windows-Zeilenumbruch (CrLf) hinter jede Zeile packen.
set "txt="
<"!file!" (
for /f %%i in ('type "!file!"^|find /c /v ""') do for /l %%j in (1 1 %%i) do (
set "line=" &set /p "line="
set "txt=!txt!!line!!cr!!lf!"
)
)
REM Dein Event erstellen.
eventcreate /t information /id 1000 /d "!txt:~0,-2!"
REM Verzögerte Variablenerweiterung wird nicht weiter benötigt.
endlocal
REM Zurück zur OEM Codepage.
>nul chcp %oemcp%
REM Ggf. Datei löschen.
del "%file%"
pause
Grüße
rubberman
Hi!
Das sieht sehr interessant aus!
Ist es auch möglich, dass das Script/Batch eine vorhandene "log.txt", um dies Beschreibungen darin in den Event zu schreiben?
Wenn ja: Wie müsste ich den Inhalt der der "log.txt" aussehen, das der mehrzeilige Inhalt auch im Event-Log mehrzeilig dargestellt wird?
Wo muss die Log-Datei liegen, bzw. wo gebe ich den Ablageort vor?
Beste Grüße,
CS
Das sieht sehr interessant aus!
Ist es auch möglich, dass das Script/Batch eine vorhandene "log.txt", um dies Beschreibungen darin in den Event zu schreiben?
Wenn ja: Wie müsste ich den Inhalt der der "log.txt" aussehen, das der mehrzeilige Inhalt auch im Event-Log mehrzeilig dargestellt wird?
Wo muss die Log-Datei liegen, bzw. wo gebe ich den Ablageort vor?
Beste Grüße,
CS
Hallo Computerseelsorger.
Ergo: Alles erklärt. Lesen musst du allerdings selbst.
Nach wie vor gilt die Warnung vor Risiken und Nebenwirkungen ...
Grüße
rubberman
Ist es auch möglich, dass das Script/Batch eine vorhandene "log.txt", um dies Beschreibungen darin in den Event zu schreiben?
Ich hatte gehofft der Code wäre wirklich ausreichend gut kommentiert Siehe Zeile 13 oben.Wie müsste ich den Inhalt der der "log.txt" aussehen
Keine Ahnung. Wie sieht er denn aus?Wo muss die Log-Datei liegen, bzw. wo gebe ich den Ablageort vor?
Siehe Zeilen 3 und 4 oben.Ergo: Alles erklärt. Lesen musst du allerdings selbst.
Nach wie vor gilt die Warnung vor Risiken und Nebenwirkungen ...
Grüße
rubberman