Só não gosto da sintaxe de:
if (Test-Path $path) { ... }
e
if (-not (Test-Path $path)) { ... }
if (!(Test-Path $path)) { ... }
especialmente, há muitos parênteses e não é muito legível ao verificar "não existe" para um uso tão comum. Qual é a melhor maneira de fazer isso?
Atualização: Minha solução atual é usar aliases para exist
e not-exist
conforme explicado aqui .
Problema relacionado no repositório do PowerShell: https://github.com/PowerShell/PowerShell/issues/1970
powershell
orad
fonte
fonte
try{ Test-Path -EA Stop $path; #stuff to do if found } catch { # stuff to do if not found }
Respostas:
Se você deseja apenas uma alternativa à sintaxe do cmdlet, especificamente para arquivos, use o
File.Exists()
método .NET:Se, por outro lado, você quiser um alias negado de uso geral para
Test-Path
, aqui está como você deve fazer isso:notexists
agora se comportará exatamente comoTest-Path
, mas sempre retornará o resultado oposto:Como você já mostrou, o oposto é bastante fácil, apenas um alias
exists
paraTest-Path
:fonte
$path
for "especial", como em um provedor Powershell (pense em HKLM: \ SOFTWARE \ ...), isso irá falhar terrivelmente.if(Test-Path $path){}else{ # do your thing }
A solução de alias que você postou é inteligente, mas eu argumentaria contra seu uso em scripts, pela mesma razão que não gosto de usar apelidos em scripts; isso tende a prejudicar a legibilidade.
Se isso é algo que você deseja adicionar ao seu perfil para poder digitar comandos rápidos ou usá-lo como um shell, então posso ver que faz sentido.
Você pode considerar tubulação em vez disso:
Como alternativa, para a abordagem negativa, se apropriado para o seu código, você pode torná-la uma verificação positiva e usar
else
para a negativa:fonte
False
. Você precisa fazer comoif (-not ($path | Test-Path)) { ... }
.Adicione os seguintes aliases. Acho que devem estar disponíveis no PowerShell por padrão:
Com isso, as declarações condicionais mudarão para:
e
fonte
Outra opção é usar o
IO.FileInfo
que fornece tantas informações sobre o arquivo que torna a vida mais fácil apenas com este tipo:Mais detalhes no meu blog.
fonte
Para verificar se existe um caminho para um diretório, use este:
Para verificar se existe um caminho para um arquivo, use o que @Mathias sugeriu:
fonte
Esta é a minha maneira de novato com poderes de fazer isso
fonte