Ich mag einfach nicht die Syntax von:
if (Test-Path $path) { ... }
und
if (-not (Test-Path $path)) { ... }
if (!(Test-Path $path)) { ... }
Insbesondere gibt es zu viele Klammern und ist nicht sehr gut lesbar, wenn für eine so häufige Verwendung nach "nicht vorhanden" gesucht wird. Was ist ein besserer Weg, dies zu tun?
Update: Meine aktuelle Lösung besteht darin, Aliase für exist
und not-exist
wie hier erläutert zu verwenden .
Zugehöriges Problem im PowerShell-Repository: https://github.com/PowerShell/PowerShell/issues/1970
powershell
orad
quelle
quelle
try{ Test-Path -EA Stop $path; #stuff to do if found } catch { # stuff to do if not found }
Antworten:
Wenn Sie nur eine Alternative zur Cmdlet-Syntax speziell für Dateien wünschen, verwenden Sie die
File.Exists()
.NET-Methode:Wenn Sie andererseits einen für allgemeine Zwecke negierten Alias wünschen
Test-Path
, sollten Sie dies folgendermaßen tun:notexists
verhält sich jetzt genau soTest-Path
, gibt aber immer das gegenteilige Ergebnis zurück:Wie Sie bereits gezeigt haben, ist das Gegenteil ganz einfach, nur Alias
exists
fürTest-Path
:quelle
$path
es "speziell" ist, wie bei einem Powershell-Anbieter (denken Sie an HKLM: \ SOFTWARE \ ...), schlägt dies kläglich fehl.if(Test-Path $path){}else{ # do your thing }
Die von Ihnen veröffentlichte Alias-Lösung ist clever, aber ich würde mich gegen die Verwendung in Skripten aus demselben Grund aussprechen, aus dem ich keine Aliase in Skripten verwenden möchte. Dies kann die Lesbarkeit beeinträchtigen.
Wenn dies etwas ist, das Sie Ihrem Profil hinzufügen möchten, damit Sie schnelle Befehle eingeben oder es als Shell verwenden können, dann könnte ich sehen, dass dies sinnvoll ist.
Sie könnten stattdessen Rohrleitungen in Betracht ziehen:
Alternativ können Sie für den negativen Ansatz, falls dies für Ihren Code angemessen ist, eine positive Prüfung durchführen und dann
else
für den negativen verwenden:quelle
False
. Du musst es so machenif (-not ($path | Test-Path)) { ... }
.Fügen Sie die folgenden Aliase hinzu. Ich denke, diese sollten standardmäßig in PowerShell verfügbar gemacht werden:
Damit ändern sich die bedingten Anweisungen in:
und
quelle
Eine andere Option ist die Verwendung,
IO.FileInfo
die Ihnen so viele Dateiinformationen liefert, dass das Leben nur mit diesem Typ einfacher wird:Weitere Details in meinem Blog.
quelle
Verwenden Sie diesen Pfad, um zu überprüfen, ob ein Pfad zu einem Verzeichnis vorhanden ist:
Um zu überprüfen, ob ein Pfad zu einer Datei vorhanden ist, verwenden Sie die folgenden Vorschläge von @Mathias :
quelle
Dies ist meine Powershell-Neuling-Methode, um dies zu tun
quelle