验证用户输入(路径)

时间:2019-04-15 07:25:22

标签: powershell

我的问题是:用户应该能够输入路径。如果输入无效,则应重复此过程,直到用户输入有效路径为止。

我尝试用Test-Path进行验证,但是我不知道自己在做什么错。

我当前的代码如下:

$repeatpath = $false
do {
    $path = Get-ChildItem -Path (Read-Host -Prompt "Please enter a path")
    if (Test-Path -Path $path -IsValid) {
        $repeatpath = $false
    } else {
        $repeatpath = $true
        "wrong path"
    }
} until ($repeatpath -eq $false) 

我收到此错误:

Get-ChildItem : Cannot find path 'C:\Hans' because it does not exist.
At C:\Users\Asli\Desktop\O2P2_Version1_2.ps1:146 char:17
+ ...     $path = Get-ChildItem -Path (Read-Host -Prompt "Please enter a pa ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Hans:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Test-Path : Cannot bind argument to parameter 'Path' because it is null.
At C:\Users\Asli\Desktop\O2P2_Version1_2.ps1:147 char:29
+         if (Test-Path -Path $path -IsValid)
+                             ~~~~~
    + CategoryInfo          : InvalidData: (:) [Test-Path], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.TestPathCommand

我知道该路径不存在,这很好。但是他应该只是回应“错误的路径”并重复该过程。

1 个答案:

答案 0 :(得分:2)

您可以通过无休止的$repeatpath循环来完全不需要While($true)变量。

此版本使用-IsValid开关来测试路径的语法,而不管路径的元素是否存在。 如果路径语法有效,则返回$ True,否则返回$ False。

while ($true) {
    $path = Read-Host -Prompt "Please enter a path"
    if (Test-Path -Path $path -IsValid) { break }

    Write-Host "Wrong path. Please try again" -ForegroundColor Red
}

Write-Host "Valid path: '$path'" -ForegroundColor Green

此版本测试输入的路径是否存在。

while ($true) {
    $path = Read-Host -Prompt "Please enter a path"
    if (Test-Path -Path $path) { break }

    Write-Host "Wrong path. Please try again" -ForegroundColor Red
}

Write-Host "Valid path: '$path'" -ForegroundColor Green