Мне просто не нравится синтаксис:
if (Test-Path $path) { ... }
и
if (-not (Test-Path $path)) { ... }
if (!(Test-Path $path)) { ... }
особенно здесь слишком много скобок, и они не очень удобочитаемы при проверке «не существует» для такого обычного использования. Как лучше это сделать?
Обновление: мое текущее решение - использовать псевдонимы для exist
и, not-exist
как описано здесь .
Связанная проблема в репозитории PowerShell: https://github.com/PowerShell/PowerShell/issues/1970
powershell
Orad
источник
источник
try{ Test-Path -EA Stop $path; #stuff to do if found } catch { # stuff to do if not found }
Ответы:
Если вам просто нужна альтернатива синтаксису командлета, особенно для файлов, используйте
File.Exists()
метод .NET:Если, с другой стороны, вам нужен отрицательный псевдоним общего назначения для
Test-Path
, вот как вы должны это сделать:notexists
теперь будет вести себя точно так жеTest-Path
, но всегда будет возвращать противоположный результат:Как вы уже показали себя, наоборот довольно легко, просто псевдоним
exists
дляTest-Path
:источник
$path
он «особенный», например, на Powershell Provider (подумайте, HKLM: \ SOFTWARE \ ...), то это с треском провалится.if(Test-Path $path){}else{ # do your thing }
Опубликованное вами решение для псевдонимов является умным, но я бы возражал против его использования в сценариях по той же причине, по которой я не люблю использовать псевдонимы в сценариях; это имеет тенденцию ухудшать читаемость.
Если это то, что вы хотите добавить в свой профиль, чтобы вы могли набирать быстрые команды или использовать его как оболочку, тогда я мог бы увидеть в этом смысл.
Вместо этого вы можете подумать о трубопроводе:
В качестве альтернативы, для отрицательного подхода, если это подходит для вашего кода, вы можете сделать положительную проверку, а затем использовать
else
для отрицательной:источник
False
. Вам нужно сделать это какif (-not ($path | Test-Path)) { ... }
.Добавьте следующие псевдонимы. Я думаю, что по умолчанию они должны быть доступны в PowerShell:
При этом условные операторы изменятся на:
и
источник
Другой вариант - использовать,
IO.FileInfo
который дает вам столько информации о файлах, что упрощает жизнь, просто используя этот тип:Подробнее в моем блоге.
источник
Чтобы проверить, существует ли путь к каталогу, используйте этот:
Чтобы проверить, существует ли путь к файлу, используйте то, что предложил @Mathias :
источник
Это мой способ новичка в PowerShell сделать это
источник