Você pode usar o Test-Path
do PowerShell cmdlet e seu parâmetro -PathType {Container|Leaf}
1 para determinar se um caminho é um diretório ou um arquivo:
Test-Path -Path "C:\Users\myuser\FooDir" -PathType Container
# Would throw 'True' or 'False'.
A analogia para o seu roteiro de bourne seria, portanto:
param(
[string]$ToTest = "C:\Users\myuser\FooDir"
)
if(Test-Path -Path $ToTest -PathType Container){
Write-Output "Path is a directory."
elseif(Test-Path -Path $ToTest -PathType Leaf){
Write-Output "Path is a file."
}else{
Write-Output "Path is non-existent."
}
Algumas coisas sobre esse script:
-
if(Test-Path -Path $ToTest -PathType Container){}
é a versão abreviada deif((Test-Path -Path $ToTest -PathType Container) -eq $true){}
. Por isso, você também pode verificar por$false
(por exemplo,"This path is NOT a directory!"
- A maneira acima de especificar
$ToTest
significa "se nenhuma entrada do usuário for fornecida, use o valor de fallback especificado ("C:\Users\myuser\FooDir"
)" . Portanto,.\script.ps1 "D:\MyPath
avaliará"D:\MyPath"
, enquanto.\script.ps1
avaliará o valor de fallback (por exemplo,"C:\Users\myuser\FooDir"
).- Você também pode usar
[string]$ToTest = Read-Host "Please specify a path to check"
se quiser ter um prompt de console para o caminho como um fallback ... - ... ou omitir completamente a configuração do valor de fallback e usar
[Parameter(Mandatory=$true)][string]$ToTest
2 em vez disso - com isso, o script só funcionará se você especificar um caminho ao chamar o script.
- Você também pode usar
Todos os itens acima foram testados com as versões 2 a 5.1 do PowerShell.
1 Get-Help Test-Path -detailed
mostrará as mesmas informações off-line.
2 Get-Help about_functions_advanced_parameters
mostrará a mesma informação offline.