powershell - 如何将命令行参数设置为整​​数,但是如果给定非数字值,请再次询问?

标签 powershell error-handling command-line-arguments

我的脚本以命令行参数的形式要求许多用户$numUsers。然后,我使用该数字声明大小为$numUsers的数组。

当用户提供数字时,它可以正常工作,但是当给定非数字字符时,我需要再次输入一个数字。

目前,我的代码只是失败,并抛出难看的错误消息。

$numUsers = Read-Host -Prompt 'Specify how many users'
$userArray = New-Object string[] $numUsers

我尝试使用递归函数将命令行arg转换为int,如果失败,则再次要求arg,但也会失败。
function makeInt {
    param([string]$numString)
    try { $newNum = [int]$numString }
    catch { makeInt (Read-Host -Prompt 'try again') }
    }

$numUsers = Read-Host -Prompt 'Specify how many users'
makeInt $numUsers
$userArray = New-Object string[] $numUsers

我也尝试了其他几种方法,但这与我最近几天所获得的结果差不多。希望有人可以提供帮助!

最佳答案

如果您要施加的唯一约束是用户输入可转换为[int],则可以在循环中使用 [int]::TryParse() method:

[int] $number = -1
while (-not [int]::TryParse((Read-Host -Prompt 'Specify how many users'), [ref] $number)) {
    Write-Warning "Not a valid number, please try again."
}
# You only get here if the user (ultimately) provided valid input.
# $number then contains the user's input as an [int].
[int]::TryParse()尝试进行一次转换,如果转换成功,则将[int]值存储在引用传递的变量([ref])中,并返回$True
如果无法进行转换,则返回$False
while循环不断提示,直到提供有效输入为止,此后$number包含与用户输入的数字字符串等效的[int]

关于powershell - 如何将命令行参数设置为整​​数,但是如果给定非数字值,请再次询问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52595077/

相关文章:

powershell - 带有开始/处理/结束 block 的函数内的嵌套函数?

python - discord.py 对 cog 中每个命令的错误处理

python - 在Python中捕获403禁止访问

c - C中命令行的参数处理

ruby-on-rails - Rails 生成模型,包括验证?

powershell - 替换文本文件中的竖线

powershell - 如何将PS对象输出为自定义格式的字符串

java - 将 java 中的命令行参数与字符数组进行比较

powershell - 如何导出虚拟目录的内容更改一些路径然后重新导入

error-handling - 返回结构时的 Go 错误处理