我正在开发一个Power shell命令,我想在我的逻辑中确保无论用户在Read-host中输入什么“在'YYYYMMDD'?中输入日期',它应该始终只有那种格式&安培;如果用户输入了错误的格式,它应该要求用户在使用循环或其他逻辑时再次重新输入日期值。
例如当电源shell运行时:
在' YYYYMMDD'中输入日期01012001
然后它应该要求用户重新输入,因为输入的日期格式错误。
我怎样才能满足这个要求?这很难吗?
答案 0 :(得分:2)
确保用户输入日期是不可能的。您可以执行检查以确保它们输入一个8位数字,甚至可能是一些逻辑来解析数字并查看它是否是一个有效的日期,但是确保它们输入就是这样吗?无法完成。
示例:目标日期是1998年3月10日
预期输入量:19980310
实际输入:19981003
这是一个有效的输入吗?是的,如果他们试图表明1998年10月3日。
您可以使用TryParse
类的[DateTime]
方法,这至少可以验证用户是否输入了一系列对您的格式有效的数字。像这样的东西会起作用:
do{
Remove-Variable Date -ea 4
$DateString = Read-Host "Enter date (in YYYYMMDD format)"
If($DateString -match "^\d{8}$"){Try{$Date = [datetime]::ParseExact($DateString,"yyyyMMdd",$null)}catch{}}
}While(!$Date -and !($Date -eq [datetime]::ParseExact($DateString,"yyyyMMdd",$null)))
然后您将$Date
作为[datetime]
对象,$DateString
作为您想要输入的字符串。它会直接询问日期,直到他们输入有效日期为止。
修改:好的,我更新了它以删除任何现有的$Date
变量,并更新While
块以确保$Date
存在,并且等于解析的$DateString
。
答案 1 :(得分:0)
这是一个简单的例子:
do
{
$date= read-host "Please enter date (example 2015/11/09):"
$date = $date -as [datetime]
if (!$date) { "Not A valid date and time"}
} while ($date -isnot [datetime])
$date