Powershell Text aus txt lesen und Ordner anlegen
Hallo Leute,
folgender Script soll mir einen bestimmten Text aus einer Textdatei auslesen und damit einen Ordner anlegen. Die Textdatei muss dann in diesen Ordner reinverschoben werden.
Leider tut sich garnichts wenn ich den Code starte. Die Dateien bleiben immer noch im Quellpfad liegen. Es kommt auch keine Fehlermeldung oder so.
Ich vermute dass er die Passage 'Auftragsnummer :' nicht finden kann, doch genauso steht es in der Textdatei drinnen. Genauer gesagt so: '| Auftragsnummer : ' und danach kommt die Auftragsnr als 10-stellige Zahl. So habe ich es aber auch versucht einzugeben, dann kommt eine Fehlermeldung. Ich habe auch zich andere Varianten versucht, ohne Leerzeichen usw. hat alles nichts gebracht und bin jetzt echt am verzweifeln.
Hat irgendjemand einen Ratschlag für mich?
So sieht die Textdatei aus:
folgender Script soll mir einen bestimmten Text aus einer Textdatei auslesen und damit einen Ordner anlegen. Die Textdatei muss dann in diesen Ordner reinverschoben werden.
$archivpfad = 'C:\Archiv'
# Quellpfad
$quellpfad = 'C:\Quelle\*.txt'
$found = Select-String $quellpfad -Pattern 'Auftragsnummer : \s*(\d+)' -List | %{
# neuen Ordnernamen aus dem regex Submatch extrahieren und mit dem Quell-Ordner zu einem Pfad zusammensetzen
$subordner = join-path $archivpfad $_.Matches.Groups[1].Value}
# neuen Ordner erstellen
md $subordner -Force | out-null
# und Datei rein kopieren
move-item -Path $_.Path -Destination $subordner
}
Leider tut sich garnichts wenn ich den Code starte. Die Dateien bleiben immer noch im Quellpfad liegen. Es kommt auch keine Fehlermeldung oder so.
Ich vermute dass er die Passage 'Auftragsnummer :' nicht finden kann, doch genauso steht es in der Textdatei drinnen. Genauer gesagt so: '| Auftragsnummer : ' und danach kommt die Auftragsnr als 10-stellige Zahl. So habe ich es aber auch versucht einzugeben, dann kommt eine Fehlermeldung. Ich habe auch zich andere Varianten versucht, ohne Leerzeichen usw. hat alles nichts gebracht und bin jetzt echt am verzweifeln.
Hat irgendjemand einen Ratschlag für mich?
So sieht die Textdatei aus:
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1097054807
Url: https://administrator.de/forum/powershell-text-aus-txt-lesen-und-ordner-anlegen-1097054807.html
Ausgedruckt am: 15.04.2025 um 21:04 Uhr
14 Kommentare
Neuester Kommentar

Und woraus soll der Ordnernamen bestehen? Aus der folgenden Auftragsnummer in der selben Zeile oder aus der Zeile darunter? Denn der Code selbst sieht vor aus der Zeile darunter die Daten auszulesen, aber dieser Regex passt zum dem Text übrigens auch nicht.
Wenn die Auftragsnummer der Ordnername sein soll dann geht das hier
Wenn die Auftragsnummer der Ordnername sein soll dann geht das hier
$archivpfad = 'C:\Archiv'
# Quellpfad
$quellpfad = 'C:\Quelle\*.txt'
Select-String $quellpfad -Pattern 'Auftragsnummer.*?([\da-z]+)' -List | %{
# neuen Ordnernamen aus dem regex Submatch extrahieren und mit dem Quell-Ordner zu einem Pfad zusammensetzen
$subordner = join-path $archivpfad $_.Matches.Groups[1].Value
# neuen Ordner erstellen
md $subordner -Force | out-null
# und Datei rein kopieren
move-item -Path $_.Path -Destination $subordner -verbose
}

Zitat von @LeaX55:
Ich habe den Text mal in Word kopiert um zu schauen ob es Tabstopps sind statt Leerzeichen, wie Drohnald vorhin gesagt hat, es sind weder Leerzeichen noch Tabstopps, sondern dieses Celsius Symbol "°" :S
Ich habe den Text mal in Word kopiert um zu schauen ob es Tabstopps sind statt Leerzeichen, wie Drohnald vorhin gesagt hat, es sind weder Leerzeichen noch Tabstopps, sondern dieses Celsius Symbol "°" :S
Na dann, ist oben im Quelltext daran angepasst, dann ist egal was dazwischen ist ...

Kleiner Regex Fehler sorry, ist korrigiert.
Vielleicht ab und zu auch mal selbst etwas lernen und nicht nur copy n pasten ...
Reguläre Ausdrücke
ciao evo
Vielleicht ab und zu auch mal selbst etwas lernen und nicht nur copy n pasten ...
Reguläre Ausdrücke
ciao evo

Wie oben schon erwähnt, habe ich noch einen anderen Fall, wo die Bestellnummer darunter steht statt rechts daneben.
$archivpfad = 'C:\Archiv'
# Quellpfad
$quellpfad = 'C:\Quelle\*.txt'
Select-String $quellpfad -Pattern 'Bestellnr' -List -Context 1 | %{
# neuen Ordnernamen aus dem regex Submatch extrahieren und mit dem Quell-Ordner zu einem Pfad zusammensetzen
$subordner = join-path $archivpfad ([regex]::Match($_.Context.PostContext,'^\|.*?\|.*?([\da-z]+)').Groups[1].Value)
# neuen Ordner erstellen
md $subordner -Force | out-null
# und Datei rein kopieren
move-item -Path $_.Path -Destination $subordner -verbose
}

Zitat von @LeaX55:
Das funktioniert leider nicht. Er erstellt zwar neue Ordner und verschiebt die Dateien dort rein, nimmt aber als Ordnernamen nicht die Bestellnr direkt darunter sondern den ersten Text von links in der Zeile darunter.
Danke auf jeden Fall für deine Mühen und sorry dass ich da selbst nicht viel machen kann. Bei den regex bin ich komplett raus. Werde ich mir aber auf jeden Fall in Ruhe reinziehen.
Das funktioniert leider nicht. Er erstellt zwar neue Ordner und verschiebt die Dateien dort rein, nimmt aber als Ordnernamen nicht die Bestellnr direkt darunter sondern den ersten Text von links in der Zeile darunter.
Danke auf jeden Fall für deine Mühen und sorry dass ich da selbst nicht viel machen kann. Bei den regex bin ich komplett raus. Werde ich mir aber auf jeden Fall in Ruhe reinziehen.
Dann beginnt der erste Text wohl doch mit Nummern, hab es nochmal angepasst, ist halt blöd wenn du da nur "IrgendeinText" reinschreibst und nicht sagst was für Formate da vorkommen könnten ...

Zitat von @LeaX55:
Gibts denn keine Möglichkeit zu sagen dass er immer den String oder die Zahl aus der 2. Spalte nimmt, unabhängig davon ob in der 1. Spalte ein String oder eine Zahl steht?
Ist schon berücksichtigt ...Gibts denn keine Möglichkeit zu sagen dass er immer den String oder die Zahl aus der 2. Spalte nimmt, unabhängig davon ob in der 1. Spalte ein String oder eine Zahl steht?