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

Windows命令行如何用表达式替换硬编码日期并获取昨日日期

获取Windows命令行中昨日日期的方法

在Windows原生CMD环境里,确实没有像date.add(-1)这么直观的日期加减语法,但我们有两种可靠的方案来实现你的需求——一种简单省心,一种纯原生不依赖其他工具,下面分别说明:

方法一:借助PowerShell(推荐,高效可靠)

PowerShell支持直接调用.NET的日期处理API,能自动搞定闰年、月份切换(比如1月1日的昨日是去年12月31日)这些头疼的边界情况,语法也接近你想要的风格。

你可以在CMD里执行这条命令,把昨日日期存到变量里(格式和你当前用的%date:~10,4%-%date:~4,2%-%date:~7,2%完全一致,也就是YYYY-MM-DD):

for /f "delims=" %%a in ('powershell -Command "(Get-Date).AddDays(-1).ToString('yyyy-MM-dd')"') do set YESTERDAY=%%a

执行后,直接用%YESTERDAY%就能引用昨日日期了。要是只想直接输出不存变量,直接跑这条就行:

powershell -Command "(Get-Date).AddDays(-1).ToString('yyyy-MM-dd')"

方法二:纯CMD脚本(无依赖,适合受限环境)

如果你的环境不能用PowerShell,那就得用纯CMD脚本自己处理日期逻辑,虽然代码复杂点,但能覆盖所有边界情况:

@echo off
setlocal enabledelayedexpansion

:: 提取当前日期的年、月、日(和你的现有格式匹配)
set "YYYY=%date:~10,4%"
set "MM=%date:~4,2%"
set "DD=%date:~7,2%"

:: 定义非闰年各月天数
set "days_in_month=31 28 31 30 31 30 31 31 30 31 30 31"

:: 判断闰年,调整2月天数
set /a "mod4=YYYY%%4, mod100=YYYY%%100, mod400=YYYY%%400"
if !mod4! equ 0 if !mod100! neq 0 set "days_in_month=31 29 31 30 31 30 31 31 30 31 30 31"
if !mod400! equ 0 set "days_in_month=31 29 31 30 31 30 31 31 30 31 30 31"

:: 计算昨日的日数
set /a "DD=DD-1"
if !DD! lss 1 (
    :: 日数不足,回退到上个月
    set /a "MM=MM-1"
    if !MM! lss 1 (
        :: 月份不足,回退到去年
        set /a "YYYY=YYYY-1"
        set "MM=12"
    )
    :: 获取上个月的天数
    set "index=0"
    for %%d in (!days_in_month!) do (
        set /a "index+=1"
        if !index! equ !MM! set "DD=%%d"
    )
)

:: 补前导零,确保月、日是两位数格式
if !MM! lss 10 set "MM=0!MM!"
if !DD! lss 10 set "DD=0!DD!"

:: 组合成目标格式的昨日日期
set "YESTERDAY=!YYYY!-!MM!-!DD!"
echo !YESTERDAY!

endlocal

把这段代码存成.bat文件运行,就能得到昨日日期,或者把YESTERDAY变量整合到你的现有脚本里。

重要提醒

你当前用的%date:~10,4%-%date:~4,2%-%date:~7,2%是依赖系统区域设置的——如果你的系统日期显示格式不是ddd MM/DD/YYYY(比如有些地区是YYYY/MM/DD),那%date%的截取位置就得调整。而PowerShell的方法不受区域设置影响,这也是更推荐它的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:50:44