You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell打印未来4个周五的日期?解决现有脚本重复输出同一日期的问题

看起来你遇到的问题是脚本一直重复输出同一个周五的日期,我来帮你分析下问题所在,再给出修复和更优的实现方式~

问题出在哪?

你的脚本有两个关键错误导致重复输出:

  1. while循环的增量逻辑错误:你在while里用$date = $date.AddDays($num),这里的$num是循环变量(从1到4),这会导致每次跳过的天数完全不对,而且第一次找到周五后,后续循环没有继续推进日期,一直停留在同一个时间点。
  2. 未推进到下一周:找到第一个周五后,你没有把日期往后推7天,所以每次循环都在处理同一个周五,自然输出重复的结果。

修复后的脚本

先修正逻辑,先找到第一个即将到来的周五,之后每次循环都往后推7天获取下一个周五:

$date = Get-Date
# 先找到第一个即将到来的周五(如果今天是周五,就从今天开始)
while ($date.DayOfWeek -ne "Friday") {
    $date = $date.AddDays(1)
}
# 循环输出4个连续的周五
for ($num = 1 ; $num -le 4 ; $num++){
    $datestr = $date.ToString('dd-MM-yyyy')
    Write-Output $datestr
    $SomeVar = "Friday - $num - $datestr"
    Write-Output $SomeVar
    # 每次循环后往后推7天,得到下一个周五
    $date = $date.AddDays(7)
}

更简洁的实现方式

其实可以不用while循环,直接通过计算天数偏移来获取目标日期,代码更简洁高效:

$today = Get-Date
# 计算到下一个周五的天数:PowerShell里DayOfWeek的数值是0(周日)到6(周六),周五对应5
$daysToNextFriday = (5 - $today.DayOfWeek + 7) % 7
# 如果今天就是周五,你想从下周五开始的话,就把上面的结果加7
# $daysToNextFriday = ($daysToNextFriday -eq 0) ? 7 : $daysToNextFriday
$nextFriday = $today.AddDays($daysToNextFriday)

# 用管道输出4个周五
1..4 | ForEach-Object {
    $datestr = $nextFriday.ToString('dd-MM-yyyy')
    Write-Output $datestr
    Write-Output "Friday - $_ - $datestr"
    $nextFriday = $nextFriday.AddDays(7)
}

这段代码里的(5 - $today.DayOfWeek + 7) % 7是为了处理所有情况:比如今天是周六(DayOfWeek=6),计算后得到6天,刚好到下周五;如果今天是周五,结果是0,此时你可以根据需求决定是从今天开始还是下周五开始。

内容的提问来源于stack exchange,提问作者nikita kakraniya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 12:52:45