germanbeast
Goto Top

Mehrere Werte in Variable schreiben Powershell

Hallo zusammen,

ich habe eine kleine Frage zu meinem Script. Dieses sucht in TXT Dateien nach einem bestimmten Wert und wenn dies zutrifft nennt er die Datei um soviel schon mal im vorab.

Jetzt wollte ich gerne wissen wie es möglich ist dass das Script mehr als ein Wort in der TXT Datei sucht. Sprich es soll nicht nur nach BMG-Lagerbestand gesucht werden sondern bspw. auch nach Saarland. Also nochmal zusammengefasst gesagt es soll dass "UND" das drin stehen.


Hier mein Script zur Veranschaulichung:

$Dateien= get-childitem Z:\SAP_Download\Allgemein -Force
$wert1 = @("BMG-Lagerbestand" , "Saarland") <-- hier habe ich versucht mit Komma zu arbeiten.  
$wert2 = @("BMG-Materialbelege" "Saarland")  
$wert3 = @("BMG-Lieferungen" "Saarland")  


foreach($Datei in $Dateien){

if ((get-content Z:\SAP_Download\Allgemein\$Datei) -contains $wert1)
{Rename-Item Z:\SAP_Download\Allgemein\$Datei Z:\SAP_Download\Allgemein\KON_Bestand_BMG.txt}
else
{echo "nein"}  

if (test-path Z:\SAP_Download\Allgemein\$Datei)
{
if ((get-content Z:\SAP_Download\Allgemein\$Datei) -contains $wert2 )
{Rename-Item Z:\SAP_Download\Allgemein\$Datei Z:\SAP_Download\Allgemein\KON_WE_BMG.txt}
else
{echo "nein"}  
}

if (test-path Z:\SAP_Download\Allgemein\$Datei)
{
if ((get-content Z:\SAP_Download\Allgemein\$Datei) -contains $wert3)
{Rename-Item Z:\SAP_Download\Allgemein\$Datei Z:\SAP_Download\Allgemein\KON_WA_BMG.txt}
else
{echo "nein"}  
}

}

Wie oben zu sehen habe ich versucht neben BMG-Lagerbestand Saarland einzufügen. Dann hat er aber garnichts mehr gesucht in der TXT Datei sondern nur noch Nein zurückgegeben.

Ich hoffe ihr könnt mir eine kleine Gedankenstütze dazu geben oder mir auf die Sprünge helfen. Vielen Dank schon mal im vorraus für eure Hilfe und Tipps.


Gruß

Content-Key: 658225

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

Printed on: April 16, 2024 at 16:04 o'clock

Member: GarfieldBonn
GarfieldBonn Mar 03, 2021 updated at 09:12:40 (UTC)
Goto Top
$Wert ist ein Array. Dann kannst du dafür eine Foreach-Schleife basteln, setzt ein Variable auf $True und nach Durchlauf der Schleife wird bei TRUE die Datei umbenannt.

Oder wenn nicht allzuviel Werte verbinde die If-Abfrage mit '.or.' für $wert1, $wert2 ,....

oder so

$array1 = $datei.split(" ")
$Array2 = "Wert1", "Wert2", "wert3"

IF ($array1 | ?{$_.Split('=') -in ($array2 | %{$_.Split('=')})}) {rename-item .....}


Dürfte aber nicht funktionieren, wenn ein Satzzeichen direkt am Wort steht. die müssten dann aus $Array1 erstmal entfernt werden
Member: germanbeast
germanbeast Mar 03, 2021 at 09:28:44 (UTC)
Goto Top
Okay das ist schon mal eine gute Hilfestellung danke dafür.

Aber kann ich mit or abfragen dass wenn beide Werte in der TXT Datei sind dass sie dann erst umbenannt wird?

Habe es so probiert

if ((get-content Z:\SAP_Download\Allgemein\$Datei) -contains $wert1 -and $wert4)

Das ging leider nicht er hat es trotzdem umbenannt obwohl ich als Test in die Variable was reingeschrieben habe was nicht in der TXT Datei war.

Danke schon mal für die Unterstützung.
Member: GarfieldBonn
GarfieldBonn Mar 03, 2021 at 16:11:58 (UTC)
Goto Top
$A=get-content Z:\SAP_Download\Allgemein\$Datei
if (($A -contains $wert1) -or ($a -contains $wert4)) {...}

oder wenn es reicht wenn nur ein Treffer vorhanden sein muss
und wenn alle Treffer vorhanden sein müssen