If befehle richtig ausführen
Hallo,
ich habe ein Script gebaut, dass 3 Dateien auslesen soll und nach dem entsprechenden Inhalt nur diese 3 Dateien löschen soll.
Ich habe schon ein wenig gebastelt, jedoch funktioniert das ganze nicht wirklich.
Bitte um Unterstützung.
Hier das Script:
$Dateien=get-childitem c:\Location\test2
foreach($Datei in $Dateien){
$file = Get-Content c:\Location\test2\$Datei
$containsWord1 = $file1 | %{$_ -match "BMG-Lagerbestand"}
$containsWord2 = $file2 | %{$_ -match "BMG-Materialbelege"}
$containsWord3 = $file3 | %{$_ -match "BMG-Lieferungen"}
if ($containsWord1 -contains $true) {
{remove-item c:\Location\test2\$file1}
if ($containsWord2 -contains $true)
{remove-item c:\Location\test2\$file2}
if ($containsWord3 -contains $true)
{remove-item c:\Location\test2\$file3}
else {[System.Windows.Forms.MessageBox]::Show("Error","Error",0)}
}
}
Vorab vielen Dank.
MfG
Nick
ich habe ein Script gebaut, dass 3 Dateien auslesen soll und nach dem entsprechenden Inhalt nur diese 3 Dateien löschen soll.
Ich habe schon ein wenig gebastelt, jedoch funktioniert das ganze nicht wirklich.
Bitte um Unterstützung.
Hier das Script:
$Dateien=get-childitem c:\Location\test2
foreach($Datei in $Dateien){
$file = Get-Content c:\Location\test2\$Datei
$containsWord1 = $file1 | %{$_ -match "BMG-Lagerbestand"}
$containsWord2 = $file2 | %{$_ -match "BMG-Materialbelege"}
$containsWord3 = $file3 | %{$_ -match "BMG-Lieferungen"}
if ($containsWord1 -contains $true) {
{remove-item c:\Location\test2\$file1}
if ($containsWord2 -contains $true)
{remove-item c:\Location\test2\$file2}
if ($containsWord3 -contains $true)
{remove-item c:\Location\test2\$file3}
else {[System.Windows.Forms.MessageBox]::Show("Error","Error",0)}
}
}
Vorab vielen Dank.
MfG
Nick
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 642039
Url: https://administrator.de/contentid/642039
Ausgedruckt am: 25.11.2024 um 16:11 Uhr
10 Kommentare
Neuester Kommentar
Moin
Ich hab ein wenig überlegt aber irgendwie finde ich keinen Anhaltspunkt. Es wäre Hilfreich wenn du sagst was nicht funktioniert. Löscht er alles? löscht er gar nichts? Bekommst du eine Fehlermeldung? Malt er bunte Kreise?
Bitte um mehr Informationen
Gruß
Doskias
PS: Code-Klammern sind nützlich, dann können wir die sagen in welcher Zeile dein Fehler sich versteckt, wenn man ihn gefunden hat.
Zitat von @Nxtrex:
ich habe ein Script gebaut, dass 3 Dateien auslesen soll und nach dem entsprechenden Inhalt nur diese 3 Dateien löschen soll.
Ich habe schon ein wenig gebastelt, jedoch funktioniert das ganze nicht wirklich.
ich habe ein Script gebaut, dass 3 Dateien auslesen soll und nach dem entsprechenden Inhalt nur diese 3 Dateien löschen soll.
Ich habe schon ein wenig gebastelt, jedoch funktioniert das ganze nicht wirklich.
Ich hab ein wenig überlegt aber irgendwie finde ich keinen Anhaltspunkt. Es wäre Hilfreich wenn du sagst was nicht funktioniert. Löscht er alles? löscht er gar nichts? Bekommst du eine Fehlermeldung? Malt er bunte Kreise?
Bitte um Unterstützung.
Bitte um mehr Informationen
Gruß
Doskias
PS: Code-Klammern sind nützlich, dann können wir die sagen in welcher Zeile dein Fehler sich versteckt, wenn man ihn gefunden hat.
Da ist so ziemlich alles falsch was man falsch machen kann .
Dafür genügt ein Einzeiler ...
Dafür genügt ein Einzeiler ...
ls 'C:\Location\test2' -File | ?{sls $_.Fullname -Pattern ('BMG-Lagerbestand','BMG-Materialbelege','BMG-Lieferungen') -Simplematch -Quiet} | rm -force
Wenn man es nicht als Einzeiler möchte, würde ich es wie folgt lösen:
ggf. nochmal eine IF-Abfrage einbauen, damit die Schleife unterbrochen wird, wenn die Datei gelöscht wurde. Sonst gibt es Fehlermeldungen wenn der Inhalt verglichen wird nachdem die Datei gelöscht wurde.
Gruß
Doskias
@147323: Ich denke bei dem Ausgangsskript was der TO hier gepostet hat, wird er den Einzeiler nicht verstehen und daraus aus nichts lernen (können)
$Dateien=get-childitem c:\Location\test2
$werte = @("BMG-Lagerbestand","BMG-Materialbelege","BMG-Lieferungen")
foreach ($wert in $werte)
{
foreach($Datei in $Dateien){
if ((get-content c:\Location\test2\$Datei) -contains $wert)
{Remove-Item c:\Location\test2\$Datei}
else
{echo "nein"}
}
}
ggf. nochmal eine IF-Abfrage einbauen, damit die Schleife unterbrochen wird, wenn die Datei gelöscht wurde. Sonst gibt es Fehlermeldungen wenn der Inhalt verglichen wird nachdem die Datei gelöscht wurde.
Gruß
Doskias
@147323: Ich denke bei dem Ausgangsskript was der TO hier gepostet hat, wird er den Einzeiler nicht verstehen und daraus aus nichts lernen (können)
if ((get-content c:\Location\test2\$Datei) -contains $wert)
Das funktioniert so aber nicht wenn die Zeilen noch anderen Text enthalten. Der Grund: -Contains prüft keine Teilstrings sondern nur ein bestehendes Array auf eine" exakte Übereinstimmung" eines Items.wird er den Einzeiler nicht verstehen und daraus aus nichts lernen (können)
Braucht er nur nachschlagen. Handbücher lesen und Google bedienen ist natürlich Voraussetzung.
Dann halt so:
Hab die Reihenfolge der Werte und Dateien nochmal getauscht, damit spielt es keine Rolle wie viele Dateien im Verzeichnis sind und die if-Abfrage eingebaut. Und wenn er contains nicht selbst durch match ersetzen kann, empfehle ich ein Buch
$Dateien=get-childitem c:\Location\test2\
$werte = @("wert1","wert2","wert3")
foreach($Datei in $Dateien)
{
foreach ($wert in $werte)
{
if (test-path c:\Location\test2\$Datei)
{
if ((get-content c:\Location\test2\$Datei) -match $wert)
{Remove-Item c:\Location\test2\$Datei}
else
{echo "nein"}
}
}
}
Hab die Reihenfolge der Werte und Dateien nochmal getauscht, damit spielt es keine Rolle wie viele Dateien im Verzeichnis sind und die if-Abfrage eingebaut. Und wenn er contains nicht selbst durch match ersetzen kann, empfehle ich ein Buch
-match $wert
Hier sollte man aber darauf hinweisen das -Match per Default mit regulären Ausdrücken arbeitet, wenn er also dort mit Sonderzeichen hantiert und nicht per [regex]::escape($wert) arbeitet und das nicht weiß geht das schnell in die Hose .