确保用户输入采用日期格式" YYYYMMDD"使用Power Shell?

时间:2015-11-09 19:44:05

标签: powershell powershell-v2.0 powershell-v3.0

我正在开发一个Power shell命令,我想在我的逻辑中确保无论用户在Read-host中输入什么“在'YYYYMMDD'?中输入日期',它应该始终只有那种格式&安培;如果用户输入了错误的格式,它应该要求用户在使用循环或其他逻辑时再次重新输入日期值。

例如当电源shell运行时:

在' YYYYMMDD'中输入日期01012001

然后它应该要求用户重新输入,因为输入的日期格式错误。

我怎样才能满足这个要求?这很难吗?

2 个答案:

答案 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