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

Den Inhalt einer Datei komplett als Variable

Frage Entwicklung Batch & Shell

Mitglied: 77575

77575 (Level 1)

19.07.2013 um 19:17 Uhr, 2563 Aufrufe, 8 Kommentare

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
Mitglied: Endoro
19.07.2013 um 21:39 Uhr
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
Bitte warten ..
Mitglied: rubberman
19.07.2013 um 21:51 Uhr
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
Bitte warten ..
Mitglied: Herbrich19
20.07.2013 um 02:36 Uhr
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
Bitte warten ..
Mitglied: rubberman
20.07.2013 um 12:14 Uhr
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 ...
01.
@echo off &setlocal 
02.
 
03.
REM Deine temporäre Datei. (anpassen) 
04.
set "file=test.txt" 
05.
 
06.
REM Aktuelle OEM Codepage zwischenspeichern. 
07.
for /f "tokens=2 delims=:" %%i in ('chcp') do set /a "oemcp = %%~ni" 
08.
 
09.
REM Codepage auf Windows-1252 stellen, um Umlaute korrekt übergeben zu können. 
10.
>nul chcp 1252 
11.
 
12.
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. 
13.
REM (Du verarbeitest natürlich deine bestehende Datei und schmeißt diesen Block raus! Nur für mich zum Testen ...) 
14.
>"%file%" ( 
15.
  echo \"Benutzerdefiniertes Ereignis\". 
16.
  echo( 
17.
  echo Mit 
18.
  echo Zeilenumbrüchen 
19.
  echo für 
20.
  echo Testzwecke! 
21.
22.
 
23.
REM Carriage Return 
24.
for /f %%i in ('copy /z "%~f0" nul') do set "cr=%%i" 
25.
REM Line Feed (Die zwei Leerzeilen danach sind relevant!) 
26.
set lf=^ 
27.
 
28.
 
29.
REM Verzögerte Variablenerweiterung, um den Text zusammen zu bauen und mit Zeilenumbrüchen arbeiten zu können. 
30.
setlocal EnableDelayedExpansion 
31.
 
32.
REM Datei einlesen und einen Windows-Zeilenumbruch (CrLf) hinter jede Zeile packen. 
33.
set "txt=" 
34.
<"!file!" ( 
35.
  for /f %%i in ('type "!file!"^|find /c /v ""') do for /l %%j in (1 1 %%i) do ( 
36.
    set "line=" &set /p "line=" 
37.
    set "txt=!txt!!line!!cr!!lf!" 
38.
39.
40.
 
41.
REM Dein Event erstellen. 
42.
eventcreate /t information /id 1000 /d "!txt:~0,-2!" 
43.
 
44.
REM Verzögerte Variablenerweiterung wird nicht weiter benötigt. 
45.
endlocal 
46.
 
47.
REM Zurück zur OEM Codepage. 
48.
>nul chcp %oemcp% 
49.
 
50.
REM Ggf. Datei löschen. 
51.
del "%file%" 
52.
 
53.
pause
Grüße
rubberman
Bitte warten ..
Mitglied: 77575
22.07.2013 um 18:14 Uhr
Hallo rubberman,

das funktioniert einwandfrei.
Vielen Dank.

gruss 01
Bitte warten ..
Mitglied: Computerseelsorger
10.09.2014 um 16:39 Uhr
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
Bitte warten ..
Mitglied: rubberman
10.09.2014, aktualisiert um 18:56 Uhr
Hallo Computerseelsorger.

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
Bitte warten ..
Mitglied: Computerseelsorger
11.09.2014 um 08:19 Uhr
Super, danke!
Ja, richtig. Lesen muss man schon selber! Hat prima geklappt!
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
gelöst Aktueller Besitzer der aktuellen Datei herausfinden und in Variable schreiben (11)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
gelöst Variable aus ini Datei auslesen und weiterverwenden (17)

Frage von n0cturne zum Thema Batch & Shell ...

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

Frage von Xaero1982 zum Thema Microsoft ...

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

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...