Проверить ввод пользователя (путь) - PullRequest
1 голос
/ 15 апреля 2019

Моя проблема: пользователь должен иметь возможность ввести путь. Если ввод неверен, он должен повторять процесс до тех пор, пока пользователь не введет правильный путь.

Я пытался подтвердить с помощью 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 Ответ

2 голосов
/ 15 апреля 2019

Вы можете обойтись без необходимости переменной $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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...