Powershell suche u. vergleiche u. ändere bei Bedarf
Hallo,
ich brauche mal wieder Eure Hilfe und das hat beim letzten Mal so gut geklappt. Ich hoffe Ihr könnt mir auch dieses mal wieder helfen:
Ausgangssituation:
1. Es gibt den Ordner A und darin den order B. In Ordner A kommen automatisch Dateien.
2. Ein Script verändert dann die Dateibezeichnung und erstellt eine Kopie der Datei in Ordner B.
3. Danach wird die Datei aus Order A in Ordner C geschoben.
Nun soll folgendes passieren und hierfür brauche ich Eure hilfe:
2.1 Ein weiteres Script soll in der Datei nach einem bestimmten Wort suchen (z.B. "Seriennummer:"). Die dahinterstehende Nummer soll das Script dann mit allen Dateien aus dem Ordner B vergleichen. Gibt es bereits eine Datei, wo die Seriennummer vorhanden ist, dann soll das Script unterhalb von Seriennummer eine neue Zeile einfügen und einen vordefinierten (immer gleichen) Text hinzufügen (z.B. SN:Ja). Wenn die Seriennummer aber nicht in den Dateien aus Ordner B gefunden werden kann, dann soll er die Datei so lassen.
Hier ein Beispiel:
Ordner A:
Datei 10 (Seriennummer: 10)
Ordner B:
Datei 1 (Seriennummer: 1)
...
Datei 10 (Seriennummer: 10)
...
Datei 100 (Seriennummer: 100)
- - -
2.1 Script startet
Script durchsucht Ordner A, Datei 10 nach der Serienummer. Er findet die Nummer 10. Jetzt durchsucht er die Dateien aus Ordner B auf Seriennummer: 10. Er findet die Datei. In diesem Fall schreibt er in die Datei in Ordner A unterhalb von Seriennummer in eine neue Zeile SN: Ja. Fertig.
Findet dazu jemand eine Möglichkeit?
ich brauche mal wieder Eure Hilfe und das hat beim letzten Mal so gut geklappt. Ich hoffe Ihr könnt mir auch dieses mal wieder helfen:
Ausgangssituation:
1. Es gibt den Ordner A und darin den order B. In Ordner A kommen automatisch Dateien.
2. Ein Script verändert dann die Dateibezeichnung und erstellt eine Kopie der Datei in Ordner B.
3. Danach wird die Datei aus Order A in Ordner C geschoben.
Nun soll folgendes passieren und hierfür brauche ich Eure hilfe:
2.1 Ein weiteres Script soll in der Datei nach einem bestimmten Wort suchen (z.B. "Seriennummer:"). Die dahinterstehende Nummer soll das Script dann mit allen Dateien aus dem Ordner B vergleichen. Gibt es bereits eine Datei, wo die Seriennummer vorhanden ist, dann soll das Script unterhalb von Seriennummer eine neue Zeile einfügen und einen vordefinierten (immer gleichen) Text hinzufügen (z.B. SN:Ja). Wenn die Seriennummer aber nicht in den Dateien aus Ordner B gefunden werden kann, dann soll er die Datei so lassen.
Hier ein Beispiel:
Ordner A:
Datei 10 (Seriennummer: 10)
Ordner B:
Datei 1 (Seriennummer: 1)
...
Datei 10 (Seriennummer: 10)
...
Datei 100 (Seriennummer: 100)
- - -
2.1 Script startet
Script durchsucht Ordner A, Datei 10 nach der Serienummer. Er findet die Nummer 10. Jetzt durchsucht er die Dateien aus Ordner B auf Seriennummer: 10. Er findet die Datei. In diesem Fall schreibt er in die Datei in Ordner A unterhalb von Seriennummer in eine neue Zeile SN: Ja. Fertig.
Findet dazu jemand eine Möglichkeit?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 538494
Url: https://administrator.de/forum/powershell-suche-u-vergleiche-u-aendere-bei-bedarf-538494.html
Ausgedruckt am: 23.12.2024 um 10:12 Uhr
6 Kommentare
Neuester Kommentar
Moin,
z.B. so:
Gruß TK1987
z.B. so:
$OrdnerA='C:\Ordner A'
$OrdnerB='C:\Ordner B'
$Suchbegriff='Seriennummer'
$Einfügen='SN: Ja'
$SN=sls "^$Suchbegriff" $OrdnerA\*
$SN | % {
$vorhanden=sls $_.Line $OrdnerB\*
if ($vorhanden) {
write-host $_.line gefunden in "'"$OrdnerB\$($Vorhanden.Filename)"'"
[array]$File=cat $OrdnerA\$($_.Filename) | select -First $_.LineNumber
$File+=$Einfügen
$File+=cat $OrdnerA\$($_.Filename) | select -skip $_.LineNumber
$File | Out-File $OrdnerA\$($_.Filename)
}
}
Gruß TK1987
Zitat von @sokraTonis:
Hallo TK1987,
"sls" in Zeile 6 will Powershell nicht (Fehler: kein bekanntes cmdlet...).
sls ist in Powershell 5.1 ein vordefinierter Alias für select-string. Vermutlich nutzt du noch die ältere Version 2.0, sieheHallo TK1987,
"sls" in Zeile 6 will Powershell nicht (Fehler: kein bekanntes cmdlet...).
$PSVersionTable
Die Datei *Pfad* kann nicht gelesen werden. Zugriff auf den Ordner wurde verweigert.
Der ausführende Benutzer muss natürlich Lese- und Schreibrechte für Ordner A, sowie Leserechte für Ordner B bestizen. Andernfalls musst du das Skript als Administrator ausführen. Bei mir funktioniert es wunderbar (auch mit 2.0, nachdem sls duch select-string ersetzt wurde).Gruß TK1987
Stimmt, in dem Fall muss die Zeile
auf abgeändert werden, sonst wird versucht eine Zeichenkette in einem Ordner zu suchen.
Noch besser wäre natürlich, das explizite Dateiformat anzugeben, also z.B. "*.txt", um Konflikten mit anderen Dateiformaten vorzubeugen.
Gruß TK1987
$SN=sls "^$Suchbegriff" $OrdnerA\*
$SN=sls "^$Suchbegriff" $OrdnerA\*.*
Noch besser wäre natürlich, das explizite Dateiformat anzugeben, also z.B. "*.txt", um Konflikten mit anderen Dateiformaten vorzubeugen.
Gruß TK1987