2017-08-07 2 views
-1

einige einfache Skript:Finden von Dateien und beenden, wenn die Datei nicht existiert in Powershell

$sql = Get-ChildItem -Path "C:\files\" -Filter *.sql 

In C:/files/kann sein:

1. Keine Datei. (meine Ausgabe)

  1. Eine Datei (test.sql)

  2. Mehrere Dateien. (Test1.sql, test2.sql, etc)

Für 3 Ich bin if ($sql.Count -gt 1) und seine adaequat verwenden. 2 - ist nicht so relevant.

1. ist ein Problem - habe ich irgendeine Möglichkeit (Methode Eigenschaft) zu überprüfen und Fehler oder "Exit 1", wenn die Datei überhaupt nicht an der Quelle vorhanden ist? (ohne irgendwelche if/else "magic") Nun wird Pfad Zeichenfolge in $ SQL-Variable setzen, wenn es keine * .SQL-Datei im Ordner gibt.

+0

'Jetzt ist es Pfad String in $ sql Variable setzen, wenn es keine irgendeine * SQL-Datei in folder' sind ich nicht replizieren kann , sollten Sie ein leeres Array haben, wenn keine Dateien gefunden werden, sollten Sie in der Lage sein, mit 'if ($ sql.count -eq 0)' – arco444

+0

@Sinai R zu beenden.: Was haben Sie versucht? Bitte poste den Code, den du geschrieben hast. – Manu

+0

Hallo, ich denke, BenH hat unten geantwortet. Es gibt ein leeres Array. Es ist mein Problem. :) Wenn ich etwas "holen" will und da nichts ist, nehme ich einen Fehler wahr. Vielleicht gibt es eine andere Methode, um Dateien zu bekommen. Ohne wenn/sonst. Das ist eine Frage. –

Antwort

1

Get-ChildItem tritt kein Fehler auf, wenn keine Dateien zum Filter passen, sondern einfach ein leeres Array zurückgibt. Aus diesem Grund können Sie keinen Abbruchfehler mit -ErrorAction Stop

erzwingen. Dies bedeutet, dass Sie wahrscheinlich eine bedingte verwenden müssen. Am einfachsten wäre:

if (!($sql)) {throw 1} 

Eine Alternative wäre:

$sql = Get-ChildItem -Path "C:\files\" -Filter *.sql 
Switch ($sql.count) { 
    0 { throw 1} 
    1 { "One Item" } 
    {$_ -gt 1} { "Multiple Items" } 
    default { "Invalid input" } 
} 
+0

Ok. Ich habs. Danke, Ben! Sieht aus wie "Alternative" ist besser. Danke nochmal! :) –

Verwandte Themen