Po prostu nie podoba mi się składnia:
if (Test-Path $path) { ... }
i
if (-not (Test-Path $path)) { ... }
if (!(Test-Path $path)) { ... }
zwłaszcza, że jest zbyt wiele nawiasów i niezbyt czytelne podczas sprawdzania „nie istnieje” dla tak powszechnego zastosowania. Jaki jest lepszy sposób na zrobienie tego?
Aktualizacja: moim obecnym rozwiązaniem jest użycie aliasów dla exist
i not-exist
zgodnie z wyjaśnieniem tutaj .
Powiązany problem w repozytorium PowerShell: https://github.com/PowerShell/PowerShell/issues/1970
powershell
orad
źródło
źródło
try{ Test-Path -EA Stop $path; #stuff to do if found } catch { # stuff to do if not found }
Odpowiedzi:
Jeśli potrzebujesz tylko alternatywy dla składni poleceń cmdlet, szczególnie dla plików, użyj
File.Exists()
metody .NET:Jeśli z drugiej strony chcesz mieć zanegowany alias ogólnego przeznaczenia
Test-Path
, oto jak powinieneś to zrobić:notexists
będzie się teraz zachowywać dokładnie takTest-Path
, jak , ale zawsze zwraca odwrotny wynik:Jak już pokazano siebie, przeciwnie jest bardzo proste, wystarczy alias
exists
doTest-Path
:źródło
$path
jest „specjalny”, jak w przypadku dostawcy Powershell (pomyśl o HKLM: \ SOFTWARE \ ...), to zakończy się niepowodzeniem.if(Test-Path $path){}else{ # do your thing }
Rozwiązanie aliasu, które opublikowałeś, jest sprytne, ale sprzeciwiłbym się jego używaniu w skryptach, z tego samego powodu, dla którego nie lubię używać żadnych aliasów w skryptach; zwykle szkodzi czytelności.
Jeśli jest to coś, co chcesz dodać do swojego profilu, aby móc wypisywać szybkie polecenia lub używać go jako powłoki, to widzę, że ma to sens.
Zamiast tego możesz rozważyć orurowanie:
Alternatywnie, w przypadku podejścia negatywnego, jeśli jest to odpowiednie dla twojego kodu, możesz sprawić, że będzie to pozytywna kontrola, a następnie użyj
else
dla negatywu:źródło
False
. Musisz to zrobić jakif (-not ($path | Test-Path)) { ... }
.Dodaj następujące aliasy. Myślę, że powinny one być domyślnie dostępne w PowerShell:
W ten sposób instrukcje warunkowe zmienią się na:
i
źródło
Inną opcją jest użycie,
IO.FileInfo
które daje tak dużo informacji o pliku, że ułatwia życie po prostu używając tego typu:Więcej szczegółów na moim blogu.
źródło
Aby sprawdzić, czy istnieje ścieżka do katalogu, użyj tego:
Aby sprawdzić, czy ścieżka do pliku istnieje, skorzystaj z sugestii @Mathias :
źródło
To jest mój nowicjusz w PowerShell
źródło