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

Batch: mehrere Zeilen (Blöcke) in einer txt Datei zu einer Variablen hinzufügen

Frage Entwicklung Batch & Shell

Mitglied: pukass

pukass (Level 1) - Jetzt verbinden

17.12.2014, aktualisiert 18:32 Uhr, 1115 Aufrufe, 9 Kommentare

Guten Abend zusammen!

Bin neu hier und habe hier im Forum gesehen, dass sich einige gut in der batch auskennen.
Habe schon mehrere Tage im Internet bzw auch hier im Forum nach einer Lösung gesucht, aber noch nichts passendes gefunden.

Mein Problem:
Ich habe eine Text Datei die so aussieht:

slot: 0
name: hitachi
size: 300 GB
slot: 1
name: hitachi
size: 600 GB
slot: 2
name: hitachi
size: 900 GB
usw.

daraus möchte ich immer jeweils 3 zeilen zu einer Variablen hinzufügen:

var1:
slot: 0
name: hitachi
size: 300 GB

var2:
slot: 1
name: hitachi
size: 600 GB

var3:
slot: 2
name: hitachi
size: 900 GB

habe bisher immer nur Lösungen gefunden, die mir entweder 1 bestimmte Zeile in eine Variable schreiben oder gleich alles

Vielen Dank im voraus
lg Sebastian
Mitglied: Friemler
17.12.2014, aktualisiert um 19:18 Uhr
Hallo Sebastian,

in Batchscript ist es schwierig, einer Variablen zur Laufzeit Zeilenumbrüche hinzuzufügen. Es wäre interessant zu wissen, wie Du die Daten aus der Textdatei weiterverarbeiten möchtest und wie viele solcher Datensätze die Textdatei enthalten kann. Evtl. kann man sich dann eine andere Strategie zur Zwischenspeicherung der Daten überlegen.

Gruss
Friemler
Bitte warten ..
Mitglied: pukass
17.12.2014 um 19:30 Uhr
Hallo Friemler,

die Variablen müssen keine Zeilenumbrüche enthalten. Könnte also auch so aussehen:

var1=slot: 0 name: hitachi size: 300 GB

oder so ähnlich

Die Textdatei beinhaltet alle HDDs die an einem Raid Controller angeschlossen sind. Jede HDD wird mit 3 Zeilen beschrieben (oder auch vielleicht mehr Zeilen, dann aber immer gleich viele pro HDD). Ich möchte also mit den 3 Zeilen bzw. Werten, jede HDD einer Variable zuordnen.

Gruss
Sebastian
Bitte warten ..
Mitglied: Friemler
17.12.2014, aktualisiert 18.12.2014
Hallo Sebastian,

das könnte so gehen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
 
03.
set "InFile=In.txt" 
04.
set "DatasetSize=3" 
05.
 
06.
set /a Cnt=0 
07.
set /a Step=0 
08.
set /a Idx=0 
09.
 
10.
for /f "usebackq delims=" %%l in ("%InFile%") do ( 
11.
  set /a Step=Cnt %% DatasetSize 
12.
  if !Step! equ 0 set /a Idx+=1 
13.
  call :ExtendVar "Var!Idx!" "%%l" 
14.
  set /a Cnt+=1 
15.
16.
 
17.
set "VarName=" 
18.
set Var 
19.
 
20.
exit /b 
21.
 
22.
 
23.
 
24.
:ExtendVar 
25.
  set "VarName=%~1" 
26.
  set "AddValue=%~2" 
27.
  call set "CurValue=%%%VarName%%%" 
28.
   
29.
  if "%CurValue%" equ "" ( 
30.
    call set "%%VarName%%=%AddValue%" 
31.
  ) else ( 
32.
    call set "%%VarName%%=%%%VarName%%% %AddValue%" 
33.
34.
exit /b
In Zeile 3 muss der Pfad zur Eingabedatei eingetragen werden, in Zeile 4 die Länge (in Zeilen) eines Datensatzes.

Das Script erzeugt für jeden Datensatz eine Variable mit dem Namen VarX, wobei X für die 1-basierte Nummer des Datensatzes steht. Der fixe Namensbestandteil kann in Zeile 13 geändert werden, indem bei "Var!Idx!" das Var durch etwas anderes ersetzt wird.

In Zeile 18 werden alle Variablen ausgegeben, deren Name mit Var anfängt. Damit kann der erfolgreiche Abschluss des Scripts überprüft werden. Wenn die o.g. Änderung in Zeile 13 durchgeführt wurde, muss Zeile 18 entsprechend angepasst werden.

Damit bei der abschließenden Ausgabe der erzeugten Variablen nicht auch die während des Scriptlaufs benutzte Variable VarName (fängt auch mit Var an) ausgegeben wird, wird sie in Zeile 17 gelöscht.

Gruß
Friemler
Bitte warten ..
Mitglied: pukass
18.12.2014 um 08:00 Uhr
Hallo Friemler,

Hab die Batch gerade mal ausprobiert und sie läuft super. Vielen Dank dafür.

Eine Frage hätte ich noch: Was muss ich ändern falls ich anstatt der 3 Zeilen 4 oder mehr Zeilen hätte?

Gruß
Sebastian
Bitte warten ..
Mitglied: Friemler
18.12.2014 um 10:45 Uhr
Hallo Sebastian,

Zitat von Friemler:

..., in Zeile 4 die Länge (in Zeilen) eines Datensatzes.

Gruß
Friemler
Bitte warten ..
Mitglied: pukass
18.12.2014 um 13:16 Uhr
Hallo Friemler,

Danke. Habs verstanden.

Gruß
Sebastian
Bitte warten ..
Mitglied: pukass
19.12.2014 um 10:19 Uhr
Hallo Friemler,

eine Frage hätte ich doch noch. Hab das Skript in meins eingefügt und funktioniert auch alles. Wie kann man die Ausgabe aller Variablen deaktivieren. Es stört ein bisschen.

Gruß
Sebastian
Bitte warten ..
Mitglied: Friemler
19.12.2014, aktualisiert um 12:11 Uhr
Hallo Sebastian,

hier nochmal der Begleittext zum Script, dort steht alles wesentliche:

Zitat von Friemler:

In Zeile 3 muss der Pfad zur Eingabedatei eingetragen werden, in Zeile 4 die Länge (in Zeilen) eines Datensatzes.

Das Script erzeugt für jeden Datensatz eine Variable mit dem Namen VarX, wobei X für die 1-basierte Nummer des
Datensatzes steht. Der fixe Namensbestandteil kann in Zeile 13 geändert werden, indem bei "Var!Idx!" das
Var durch etwas anderes ersetzt wird.

In Zeile 18 werden alle Variablen ausgegeben, deren Name mit Var anfängt. Damit kann der erfolgreiche Abschluss des
Scripts überprüft werden. Wenn die o.g. Änderung in Zeile 13 durchgeführt wurde, muss Zeile 18 entsprechend
angepasst werden.

Damit bei der abschließenden Ausgabe der erzeugten Variablen nicht auch die während des Scriptlaufs benutzte Variable
VarName (fängt auch mit Var an) ausgegeben wird, wird sie in Zeile 17 gelöscht.

Gruß
Friemler
Bitte warten ..
Mitglied: pukass
19.12.2014 um 13:39 Uhr
Ah ok! Danke!

Gruß
Sebastian
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Einzelne Zeilen in txt Datei speichern und auslesen (7)

Frage von noah1400 zum Thema Batch & Shell ...

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

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
gelöst In Batchdatei Variablen befüllen - mit Werten aus einer TXT-Datei (6)

Frage von donnyS73lb zum Thema Batch & Shell ...

Batch & Shell
Ungewöhnliche Txt.Datei-Abfrage mit Batch (3)

Frage von DaTobsn zum Thema Batch & Shell ...

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

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

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

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...