Windows Powershell v4.0 подтверждает, что текущий час - 08, но $ hour> 1 оценивается как «Ложь» - PullRequest
1 голос
/ 08 марта 2019

Код ниже представляет собой скрипт 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

Спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 08 марта 2019

Ваша переменная $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
1 голос
/ 08 марта 2019

Кажется, что вы сравниваете строку с целым числом.

Вот пример и решение

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
...