我的问题是:用户应该能够输入路径。如果输入无效,则应重复此过程,直到用户输入有效路径为止。
我尝试用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
我知道该路径不存在,这很好。但是他应该只是回应“错误的路径”并重复该过程。
答案 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