Powershell: Text in Textdatei finden und als Ordnername vergeben

Mitglied: LeaX55

LeaX55 (Level 1) - Jetzt verbinden

22.04.2021 um 15:44 Uhr, 664 Aufrufe, 10 Kommentare

Hallo Zusammen,

wie im Titel bereits steht, benötige ich ein Script um in einem Ordner, in dem mehrere Textdateien liegen, nach einem bestimmten Text zu suchen, und diesen dann als Ordnernamen einem neu erstellten Ordner zu vergeben. Die Textdatei soll dann in diesen Ordner verschoben werden.

Im Detail:

  • Ordner mit mehreren Textdateien wird Datei für Datei nach einem bestimmten Text im Inhalt durchsucht.
  • Nicht der gefundene Text sondern das was rechts daneben steht, muss einer Variable zugewiesen werden. Bsp: in der Datei gibt es eine Stelle wo steht "Bestellnr: 12345" -> es wird nach "Bestellnr:" gesucht -> wenn gefunden, soll "12345" in eine Variable.
  • Anschließend soll ein neuer Ordner erstellt werden und der Inhalt der Variable als Ordnername verwendet werden.
  • Zuletzt soll die Datei in diesen Ordner verschoben werden (Alle Dateien mit identischer Bestellnr).

Als Hinweis noch vllt dass der Text "Bestellnr: XXXXX" in jeder Datei immer vorhanden ist und auch immer in gleicher Position. Evtl. könnte man also auch nach xy Koordinaten gehen anstatt Text zu suchen?

Ich hoffe ich konnte es verständlich erklären.

Ich würde mich freuen wenn Ihr mir ein paar Codebeispiele oder Links nennen könnt mit dem ich arbeiten kann.

Bin leider noch nicht so fit in Powershell.

Alles was ich zusammenbauen konnte ist bisher das:

Bis dahin verstehs ichs noch aber dann für jede Textdatei in der eine andere Bestellnr ist, einen neuen Ordner anlegen und die richtige Textdatei in den Ordner zu verschieben, ist für mich eine Herausforderung.

Vielen Dank schonmal
Mitglied: warranty
LÖSUNG 22.04.2021, aktualisiert um 16:53 Uhr
Moin.
Gruß w.

p.s. Lektüre für Anfänger findest du hier in diesem Kommentar:
https://administrator.de/forum/zeichen-zaehlen-um-zeilenlaege-zu-begrenz ...
Bitte warten ..
Mitglied: LeaX55
22.04.2021 um 19:33 Uhr
Hi warranty,

hat beim ersten Versuch geklappt.
MEGA!!
Vielen Dank für die schnelle Lösung!

kannst Du mir vllt noch kurz erklären was das \s*(\d+) nach der Bestellnr bedeutet?
Und eine Zeile drunter das Matches[0].Groups[1].Value

Konnte darüber nirgends was gescheites finden.

Wie muss der Code eigentlich aussehen wenn die Nr unterhalb von "Bestellnr" steht statt rechts daneben?
Also so:
Bestellnr:
XXXXX

Bitte warten ..
Mitglied: warranty
22.04.2021, aktualisiert 23.04.2021
Zitat von @LeaX55:
kannst Du mir vllt noch kurz erklären was das \s*(\d+) nach der Bestellnr bedeutet?
Das sind Regular Expressions und bedeutet matche 0 oder mehrere Leerzeichen worauf Mindestens 1 oder mehrere Nummern folgen, welche durch die Klammern in einen Submatch geladen werden.

Und eine Zeile drunter das Matches[0].Groups[1].Value
Damit greife ich auf den oben geklammerten Submatch im Regex (also die Nummer) zu
Wie muss der Code eigentlich aussehen wenn die Nr unterhalb von "Bestellnr" steht statt rechts daneben?
Also so:
Bestellnr:
XXXXX

Das ist dann ein klein wenig anders mit Select-String weil das zeilenweise arbeitet, aber dafür hat es den Parameter -Context
tio.run
Bitte warten ..
Mitglied: LeaX55
23.04.2021, aktualisiert um 14:30 Uhr
Hallo Warranty und danke für die Erklärung.

Regular Expressions ist ja ein komplett eigenes Kapitel. Das muss ich mir alles mal in Ruhe anschauen.

Ich habe noch ein Problem mit dem zweiten Script.
Das ist aber auf meinen Mist gewachsen weil ich dir falsche Info gegeben habe.
Die Textpassage ist schon so:
Bestellnr:
XXXXX

jedoch steht das nicht ganz links. es stehen also noch andere Sachen in diesen 2 Zeilen links und rechts daneben
Text123 Bestellnr: Text456
123456 789012 345678

Deswegen liest er die ganze Zeile unter Bestellnr und da kommt dann natürlich bullshit raus
Bitte warten ..
Mitglied: warranty
23.04.2021, aktualisiert um 15:19 Uhr
Kein Thema minimale Anpassung (s.o.) und auch dat lüppt ...
Bitte warten ..
Mitglied: LeaX55
23.04.2021 um 16:09 Uhr
irgendwas passt ihm noch nicht.

Bitte warten ..
Mitglied: warranty
23.04.2021, aktualisiert um 16:33 Uhr
Steht doch da was ihm nicht passt, lass dir dir Pfad-Variable doch einfach mal anzeigen dann siehst du auch genau welches Zeichen (|) für den Pfad illegal ist ... Mitdenken ... wir kennen ja deine Textdatei nicht!
Wenn du hier nicht exakt spezifizierstwo was steht können wir noch so viele Skripte schreiben bis wir umfallen ...
https://tio.run/##PU29DoIwEN77FDdoqgNE/BucCK4ObA5GDegRSI6W9A41UZ@9NkbZvv ...
Bitte warten ..
Mitglied: LeaX55
27.04.2021, aktualisiert um 10:41 Uhr
Hallo warranty,

Zitat von @warranty:

...lass dir dir Pfad-Variable doch einfach mal anzeigen dann siehst du auch genau welches Zeichen (|) für den Pfad illegal ist ..
https://tio.run/##PU29DoIwEN77FDdoqgNE/BucCK4ObA5GDegRSI6W9A41UZ@9NkbZvv ...

Das hatte ich gemacht aber dachte dieses Symbol stammt aus dem Code, weil es da auch irgendwo vorkommt.

aber hast vollkommen recht. habe zu wenig Info preisgegeben.

Das Problem ist, dass es 4 verschiedene Kombinationen gibt wie das aussehen kann. Deswegen wars anfangs schwer für mich das zu erklären.
1. Bestellnr: XXXXX
2. Bestellnr:
XXXXX (linksbündig)
3. Bestellnr:
XXXXX (mittendrin)
4. ohne "Bestellnr", nur XXXXX (linksbündig)

Mein Gedanke war, dass wenn ich 1 davon weiss, den Rest alleine hinbiegen kann. Habe meine Kenntnisse wohl überschätzt.

Der 1. Fall funktioniert nun wie es soll.
Das 2. hatte auch funktioniert, seh den Code aber nicht mehr weil du das überarbeitet hattest.
Das 3. geht noch nicht, wegen dem Symbol. Es sieht so aus in der Datei:
1 - Klicke auf das Bild, um es zu vergrößern
Über 4. hatten wir noch nicht geredet.
Bitte warten ..
Mitglied: warranty
LÖSUNG 27.04.2021, aktualisiert um 12:40 Uhr
Auf die Extrahierung reduziert, Rest weggelassen ...
Zitat von @LeaX55:
1. Bestellnr: XXXXX

2. Bestellnr:
XXXXX (linksbündig)

3. Bestellnr:
XXXXX (mittendrin)

4. ohne "Bestellnr", nur XXXXX (linksbündig)
Nur eine Kombination aus mehreren Zahlen [0-9] am Anfang einer Zeile? Dann ...

Bitte warten ..
Mitglied: LeaX55
27.04.2021 um 17:22 Uhr
warranty Du bist einfach der Hammer!
Würde Dir jez gern ein Bierchen ausgeben :-) face-smile

Zitat von @warranty:
4. ohne "Bestellnr", nur XXXXX (linksbündig)
Nur eine Kombination aus mehreren Zahlen [0-9] am Anfang einer Zeile? Dann ...
Da steht einfach nur die Bestellnr ohne die Bezeichnung "Bestell-Nr", und zwar immer in Zeile 3 und linksbündig
Bitte warten ..
Heiß diskutierte Inhalte
Hyper-V
Spricht was gegen die Virtualisierung mit Hyper-V?
bauinformatikerVor 1 TagFrageHyper-V32 Kommentare

Seit 10 Jahren betreiben mein Kollege und ich 2 Hosts mit ESXi. Nun sollen die neu beschafft und neu installiert werden. Bis auf einen ...

Off Topic
Vom IT-Systemelektroniker zurück zur "IT"
xsheynVor 1 TagFrageOff Topic8 Kommentare

Schönen guten Abend, vor einigen Wochen hatte ich schonmal einen Thread erstellt, dass ich IT-Systemelektroniker bin aber kaum Erfahrung in der "Typischen IT" habe. ...

Entwicklung
Plattformübergreifende Programmierung mit Visual Studio
gelöst nagitaVor 1 TagAllgemeinEntwicklung11 Kommentare

Hallo ich habe mir vor einiger Zeit die aktuellste Version von Visual Studio installiert und bin eigentlich auch recht zufrieden damit. Ich habe vor, ...

Datenbanken
Liste als PDF ausdrucken
jensgebkenVor 1 TagFrageDatenbanken6 Kommentare

Hallo Gemeinschaft, Ich habe eine Access Datenbank und darin eine Abfrage in der Kunden Adressen und Kosten angezeigt werden pro Kunde. Nun möchte ich, ...

Video & Streaming
Netzwerkspeicher IPTV
uridium69Vor 1 TagFrageVideo & Streaming8 Kommentare

Hallo Ich möchte gerne meine beiden Android IPTV Receiver das NAS als Netzwerkspeicher und als Aufnahmemedium hinzufügen, ich habe unter den Optionen "Netzwerkspeicher hinzufügen" ...

Exchange Server
Postfach für öffentliche Ordner ist voll
gelöst Tommy525600Vor 22 StundenFrageExchange Server6 Kommentare

Hallo an alle, ich habe folgendes Problem: Mein primäres Postfach für öffentliche Ordner ist voll (99,58 GB) (und ja, ich kann auch nix dafür). ...

Outlook & Mail
Outlook export to PST schlägt fehl - Alternativen?
gelöst StefanKittelVor 1 TagFrageOutlook & Mail3 Kommentare

Hallo, ich versuche gerade ca. 20 Postfächer von einem Hosted Exchange-Anbieter in PST-Dateien zu sichern/archivieren. Bei 3 Postfächer schläft dies mit "unbekannter Fehler" fehl. ...

Netzwerke
PFSense und Transferprobleme
Xaero1982Vor 21 StundenFrageNetzwerke8 Kommentare

Moin Zusammen, leidiges Thema PFSense - ich hab mich mal wieder ran gewagt. Ich hab hier so ein paar VLANs laufen und nen ESX. ...