Windows Powershell v4.0 确认当前时间为 08,但 $hour > 1 的计算结果为 "False"
Windows Powershell v4.0 confirms current hour is 08, but $hour > 1 evaluates to "False"
下面的代码是一个 PowerShell 脚本,它没有按预期执行。我添加了一些回声来测试每个条件语句,如您所见,由于某种原因它无法识别条件语句中的小时是 8(或 08)。有谁知道为什么?
$hour = get-date -UFormat %H
$min = get-date -UFormat %M
If ( ($hour -eq 7 -and $min -gt 45) -or ($hour -eq 8 -and $min -lt 55) ) {
start ["filename"]}
echo $hour \returns "08"
echo ($hour -gt .999) \returns "True"
echo ($hour -gt 1) \returns "False"
echo ($hour -gt 02) \returns "False"
EXIT
感谢您的帮助。
您的 $hour
变量包含一个字符串,而不是一个数字。您可以通过更改
将其强制为数字
$hour = get-date -UFormat %H
$min = get-date -UFormat %M
到
[int]$hour = get-date -UFormat %H
[int]$min = get-date -UFormat %M
或者最好不强制转换任何内容并使用 [DateTime]
对象提供的函数
$hour = (get-date).Hour
$min = (get-date).Minute
您似乎是在将字符串与整数进行比较。
这里有一个例子和解决方案
PS H:\> get-date -UFormat %H
09
PS H:\> (get-date -UFormat %H).GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
PS H:\> (get-date -UFormat %H) > 1
PS H:\> ([int]( get-date -UFormat %H))
9
PS H:\> ([int]( get-date -UFormat %H)).GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
PS H:\> ([int]( get-date -UFormat %H)) -gt 1
True
更好(感谢 LotPings)
PS H:\> ((Get-Date).Hour).GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
PS H:\> (Get-Date).Hour -gt 1
True
下面的代码是一个 PowerShell 脚本,它没有按预期执行。我添加了一些回声来测试每个条件语句,如您所见,由于某种原因它无法识别条件语句中的小时是 8(或 08)。有谁知道为什么?
$hour = get-date -UFormat %H
$min = get-date -UFormat %M
If ( ($hour -eq 7 -and $min -gt 45) -or ($hour -eq 8 -and $min -lt 55) ) {
start ["filename"]}
echo $hour \returns "08"
echo ($hour -gt .999) \returns "True"
echo ($hour -gt 1) \returns "False"
echo ($hour -gt 02) \returns "False"
EXIT
感谢您的帮助。
您的 $hour
变量包含一个字符串,而不是一个数字。您可以通过更改
$hour = get-date -UFormat %H
$min = get-date -UFormat %M
到
[int]$hour = get-date -UFormat %H
[int]$min = get-date -UFormat %M
或者最好不强制转换任何内容并使用 [DateTime]
对象提供的函数
$hour = (get-date).Hour
$min = (get-date).Minute
您似乎是在将字符串与整数进行比较。
这里有一个例子和解决方案
PS H:\> get-date -UFormat %H
09
PS H:\> (get-date -UFormat %H).GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
PS H:\> (get-date -UFormat %H) > 1
PS H:\> ([int]( get-date -UFormat %H))
9
PS H:\> ([int]( get-date -UFormat %H)).GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
PS H:\> ([int]( get-date -UFormat %H)) -gt 1
True
更好(感谢 LotPings)
PS H:\> ((Get-Date).Hour).GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
PS H:\> (Get-Date).Hour -gt 1
True