gpt4 book ai didi

PowerShell While循环多个条件不起作用

转载 作者:行者123 更新时间:2023-12-03 01:00:29 25 4
gpt4 key购买 nike

想要检查 while 中的多个条件循环,但它们不起作用。

#Debug
if ($DatumArray -notcontains $DatumAktuellerFeiertag) {echo "true"} else {echo "false"}
if ($TagAktuellerFeiertag -ne "Samstag") {echo "true"} else {echo "false"}
if ($TagAktuellerFeiertag -ne "Sonntag") {echo "true"} else {echo "false"}

上面的代码给出了以下结果:
truefalsetrue

Notice, one of the results is "false".

while (($DatumArray -notcontains $DatumAktuellerFeiertag) -and ($TagAktuellerFeiertag -ne "Samstag") -and ($TagAktuellerFeiertag -ne "Sonntag")) {
# some code...
}

不执行循环,即使结果之一是“假”。

归档我的目标的可能方法是什么?为什么是 while循环不工作?

编辑:

这不像预期的那样工作,因为我认为你不知道我的情况。所以我将尝试解释:

有公共(public)假期的数组 $DatumArray (01.01.2019、19.04.2019、21.04.2019 像这样......)。
$DatumAktuellerFeiertag是实际的公共(public)假期日期。
$TagAktuellerFeiertag是实际的公共(public)假期工作日。

现在我正在尝试确定下一个工作日(但如果下一个工作日也是公共(public)假期,则必须考虑这一点)。

所以我的情况是这样的:当有公共(public)假期或周六或周日时,增加 $DatumAktuellerFeiertag由 1。
while (($DatumArray -notcontains $DatumAktuellerFeiertag) -and (($TagAktuellerFeiertag -ne "Samstag") -or ($TagAktuellerFeiertag -ne "Sonntag"))) {
$DatumAktuellerFeiertag = (Get-Date $DatumAktuellerFeiertag).AddDays(1).ToString("dd/MM/yyy")
$TagAktuellerFeiertag = (Get-Date $DatumAktuellerFeiertag -Format "dddd")

echo $DatumAktuellerFeiertag
}

编辑:

试过你的版本,在“正常”的日子里完美无瑕,但在公共(public)假期给了我无尽的循环。
$ListPublicHoliday = Import-Csv 'datum.csv'

$DateArray = $ListPublicHoliday.Datum
$DateArray = $DateArray | ForEach-Object { (Get-Date $_).Date }

$ActuallyDay = Get-Date 19.04.2019

while (($DateArray -contains $ActuallyDay.Date) -or ('Samstag', 'Sonntag' -contains $ActuallyDay.DayOfWeek)) {
$ActuallyDay.AddDays(1)
}

我的 CSV:

#TYPE Selected.System.String
"基准","Feiertag","Wochentag","值"
"01.01.2019","Neujahrstag","Dienstag","01.01.2019 18:33:01"
"19.04.2019","Karfreitag","Freitag","19.04.2019 18:33:01"
"21.04.2019","Ostersonntag","Sonntag","21.04.2019 18:33:01"

PS:你能解释一下吗? (Get-Date $_).Date ?我在 Microsoft 文档上没有找到这个。

最佳答案

The loop is not performed, even though one of the results is "false". [...] Why is this while loop not working?



循环不起作用,因为其中一个结果是 $false .您的条件由与 -and 连接的 3 个子句组成运算符,这意味着所有子句的计算结果必须为 $true循环运行。但是,由于您的第 2 条和第 3 条是互斥的,这永远不会发生。

我不太确定您的条件应该是什么样子,但至少您需要条件为 A && (B || C)而不是 A && B && C .

改变这个:
while (($DatumArray -notcontains $DatumAktuellerFeiertag) -and ($TagAktuellerFeiertag -ne "Samstag") -and ($TagAktuellerFeiertag -ne "Sonntag")) {
# some code...
}

进入这个:
while (($DatumArray -notcontains $DatumAktuellerFeiertag) -and (($TagAktuellerFeiertag -ne "Samstag") -or ($TagAktuellerFeiertag -ne "Sonntag"))) {
# some code...
}

编辑:

在你更新你的问题,澄清你真正想要完成的事情之后,你的条款确实应该与 -or 联系起来。正如 Mathias 在评论中所怀疑的那样。但是,子句中的运算符不得在此之上被否定(您需要 -contains-eq 而不是 -notcontains-ne )。此外,如果 $DatumArray,您的代码会变得更简单。包含 DateTime对象而不是字符串。两个工作日的比较也可以合二为一。

像这样的东西应该工作:
$DatumArray = $DatumArray | ForEach-Object { (Get-Date $_).Date }

$startDate = ...
$cur = Get-Date $startDate
while (($DatumArray -contains $cur.Date) -or ('Samstag', 'Sonntag' -contains $cur.DayOfWeek)) {
$cur = $cur.AddDays(1)
}

关于PowerShell While循环多个条件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57072705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com