joe2017
Goto Top

Powershell - zeilenweise Variablen aus TXT Datei einlesen

Hallo,

ich habe folgendes Problem. Ich möchte meinen alten Batch Code in Powershell verwenden und finde keinen passenden Lösungsansatz.
Ich möchte zeilenweise Variablen getrennt durch Tab oder gerne auch durch ein anderes Zeichen (Bsp. ";") einlesen.

In der CMD Batch sah das folgendermaßen aus:
set source=d:\test.txt
for /f "tokens=1-5" %%i in (%source%) do echo %%i %%j %%k %%l

POWERSHELL:
mit "Get-Content" kann man zwar den ganzen Text in eine Variable einlesen, jedoch finde ich keine möglichkeit wie in der obigen Batch.
$file = Get-Content d:\test.txt
write $file

Hat hier jemand eine Idee?

Content-ID: 276969

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

Ausgedruckt am: 23.11.2024 um 12:11 Uhr

114757
Lösung 114757 10.07.2015 aktualisiert um 11:18:14 Uhr
Goto Top
Stichwort: Import-CSV face-wink
Damit kannst du den Delimiter angeben und die Spalten als Eigenschaften des CSV-Objekts für jede Zeile ansprechen...
$csv = Import-CSV 'c:\datei.txt' -Delimiter ';'  
$csv | %{
    Write-Host $_.'NameDerSpalte1'  
    Write-Host $_.'NameDerSpalte2'  
    # usw.
}
Hierbei gehe ich davon aus das deine Datei Überschriften hat. Wenn nicht musst du sie mit dem Parameter -header angeben.

Natürlich geht's auch alternativ so:

$lines= gc 'c:\datei.txt'  
$lines | %{
    $cols = $_.Split(';')  
    $cols | %{
       write-host $_
    }
}

Gruß jodel32
SaschaRD
SaschaRD 10.07.2015 um 11:04:30 Uhr
Goto Top
Hallo SauerJochen,

ich weiß nicht wie deine Textdatei aussieht.

Meine sehen meisten so aus:
19.06.2015 09:10: A
19.06.2015 09:10: B
Dann kann man ziemlich simple das Ganze wie folgt Zeilenweise auslesen oder als Variable verwenden.
$log = cs 'C:\meinetextdatei.log'  

$log
Gruß, Sascha
joe2017
joe2017 10.07.2015 um 11:13:47 Uhr
Goto Top
Hallo jodel32,

das hatte ich bereits herausgefunden. Wie kann ich jedoch die einzelnen Wörter als variable ansprechen?
ich benötige in meinem Beispiel die Variablen $name, $surename, $password, $description und diese zeilenweise.

TXT Bsp.
name;surename;password;description
hans;maier;1234;test1
max;mustermann;abcd;test2

Code Bsp.
$file = Import-Csv d:\test.txt -Delimiter ";"
write $file
joe2017
joe2017 10.07.2015 um 11:14:34 Uhr
Goto Top
Moment, mir wurde gerade nicht alles angezeigt.
114757
114757 10.07.2015 aktualisiert um 11:18:59 Uhr
Goto Top
hab ich dich oben geschrieben:
csv = Import-CSV 'c:\datei.txt' -Delimiter ';'  
$csv | %{
    Write-Host $_.username
    Write-Host $_.password
    # usw.
}
Die Foreach-Schleife arbeitet dabei alle Zeilen hintereinander ab ...
joe2017
joe2017 10.07.2015 um 11:18:49 Uhr
Goto Top
Vielen Dank jodel32 so funktioniert es.
joe2017
joe2017 10.07.2015 um 11:45:35 Uhr
Goto Top
Was ist wenn ich nur eine bestimmte Zeile aus der txt Datei benötig?
114757
114757 10.07.2015 aktualisiert um 11:49:56 Uhr
Goto Top
Zitat von @joe2017:

Was ist wenn ich nur eine bestimmte Zeile aus der txt Datei benötig?
$csv.username
oder
$csv | select -index 5 -Expand username
joe2017
joe2017 10.07.2015 um 12:22:41 Uhr
Goto Top
Ich meine wenn ich nur den Herrn Mustermann benötige?

TXT Bsp.
name;surename;password;description
hans;maier;1234;test1
max;mustermann;abcd;test2

mit Get-content kann ich nach einem Begriff in der Datei suchen und die Variable mit dieser Zeile füllen
$var = Get-Content d:\test.txt | ForEach-Object { $_ | select-string "mustermann"}

Jedoch hab ich hiermit nue eine Variable und nicht wie bei dem obigen Besipiel die separierten Variablen getrennt durch das ";"
114757
114757 10.07.2015 aktualisiert um 14:21:55 Uhr
Goto Top
Stichwort where-object ....
$csv | ?{$_.surname -eq 'mustermann'}  
joe2017
joe2017 15.07.2015 um 17:45:44 Uhr
Goto Top
Gibt es auch einen simplen weg um eine Variable zeilenweise mit mit einem Text aus einer txt zu befüllen?

Beispiel D:\TEST.TXT:
Zeile1: 1234
Zeile2: 5678
Zeile3: abcd
Zeile4: efgh

mit folgendem Befehl bekomme ich immer den gesamten Inhalt in eine Variable angezeigt.

$var = get-content "d:\test.txt"
write $var

Hat jemand einen Tip für mich?
114757
114757 15.07.2015 aktualisiert um 17:55:06 Uhr
Goto Top
Habe ich doch oben schon schon mehrere ziemlich simple Varianten gepostet. Ich weiß nicht wie simpel du noch möchtest ??

Also nochmal:
get-content ließt die Zeilen in Array aus Strings ein, d.h. also das du die Zeilen mit dem Index ansprechen kannst (Achtung: Das Array ist 0-basiert).
$var = get-content "d:\test.txt"  

#Zeile 1 ausgeben:
write-host $var
#Zeile 2 ausgeben:
write-host $var[1]
# usw
Einfach ab und zu mal die Doku lesen, das wirkt wahre Wunder, als nur Trial & Error zu betreiben...