【发布时间】:2016-12-10 14:19:07
【问题描述】:
我的输入是带有车牌和轮胎维修日期的文本文件。然后提示我写一个时间,例如 12:30。然后脚本检查时间是否合适。不使用前后有30分钟就好了。
由于 12:00-13:00 块包含一个条目,因此无法使用该示例。然后时间不好,剧本只好给我找个合适的约会。我试图每分钟逐行检查。之后,如果$help 变量没有改变,那很好,但如果改变了,那么随机时间进行检查。任何想法为什么该逻辑不起作用?
编辑:由于我编辑,我看到的唯一不起作用的是我的脚本生成了一个随机时间,但它没有检查那个时间是否正确,只需接受那个时候和再见。不知何故,我应该让它检查更多次,并且不要在第一次生成时停止,检查它,如果仍然错误,则再次随机化。
样本数据
ABC-145 8:30 BDE-540 9:45 EDS-598 10:30 SDF-478 11:30 HUT-434 12:15 JEC-238 13:15 ASD-325 14:00 VRA-123 16:15 HGV-456 18:00
$file = Get-Content Desktop/database.txt
[datetime]$time = Read-Host "Time for date?"
$start = $time
$check = $time
$help = 0
echo $time
foreach ($line in $file) {
#here I check if the date is free
$out = $line.Split()
while ($true) {
#until I found a good time
for ($i=0; $i -lt 30; $i++) {
#check the next half hour if good
if ($time -eq $out[1]) {
$help = 1
}
$time = $time.AddMinutes(1)
}
for ($i=0; $i -lt 60; $i++) {
#back check the half hour
if ($time -eq $out[1]) {
$help = 1
}
$time = $time.AddMinutes(-1)
}
$time = $time.AddMinutes(30)
if ($help -eq 0) {
break
} else {
$hour = Get-Random -Minimum 8 -Maximum 20
$minute = Get-Random -Minimum 0 -Maximum 59
$start = "$ora`:$perc"
$time = $start
$help = 0
#echo $time
}
}
}
if ($start-ne $check) {
echo "There wasnt a free date, but there is a free spot at " + $start
} else {
echo "This is free date"
}
【问题讨论】:
-
我试着稍微修正一下措辞。还有you really need to use some indentation coding style。它使代码更易于阅读,并且您可以看到嵌套语句如何更轻松地流动。这是对您和想要帮助您的人的奖励。
-
谢谢,是的,我现在也在我的本地脚本中做了,但仍然不知道问题出在哪里:/ 如果我写了一个明显的糟糕时间,比如 12:15,那么它得到了那,这是一个糟糕的价值,但它会不断产生随机时间,如果我打破它,那么它会停在第 6 次,而不是第一次,所以我很困惑 :)
-
我想我已经想到了解决方案。所以问题是在它随机化了一段时间之后,它一直在从最后一条记录开始的 while 循环中移动,不知何故我应该回到 while/foreach 循环的开始。
-
$_是一个automatic variable。不要(ab)将其用作foreach循环的循环变量。 -
编辑为 $line 但仍然相同。我不知道为什么,但我仍然得到 16:04 作为答案,但在 16:15 有一个日期。
标签: powershell random cycle