【问题标题】:How to use previous date in batch script with yyyymmdd format如何在 yyyymmdd 格式的批处理脚本中使用上一个日期
【发布时间】:2018-07-05 21:25:32
【问题描述】:

这是当前日期,我们如何使用昨天的日期......?

@echo off
set YYYYMMDD=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2% 
set a=%YYYYMMDD%
echo %a%

【问题讨论】:

标签: windows batch-file cmd


【解决方案1】:

应该这样做。

@echo off
set day=-1
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\%~n0.vbs"
set "YYYY=%result:~0,4%"
set "MM=%result:~4,2%"
set "DD=%result:~6,2%"
set "result=%yyyy%-%mm%-%dd%"
echo %result%
pause

显然,将set day=-1 增加到其他数字会减少更多天数。

只需双击批处理或在cmd.exe 提示符下运行。

【讨论】:

【解决方案2】:
  1. 这是一个名为 yesterday.bat 的脚本:
 @if (@x)==(@y) @end /***** jscript comment ******
     @echo off

     cscript //E:JScript //nologo "%~f0"
     exit /b 0

 @if (@x)==(@y) @end ******  end comment *********/

var d = new Date();
d.setDate(d.getDate() - 1);

var mm=(d.getMonth())+1
if (mm<10){
  mm="0"+mm;
}
var dd=d.getDate();
if (dd<10) {
 dd="0"+dd;
}
WScript.Echo(d.getFullYear()+""+mm+""+dd);

你可以像这样使用它

for /f %%a in ('yesterday.bat') do set "ystd=%%a"
  1. 这是您很可能已经安装的带有 powershell 的单线:

    powershell "[DateTime]::Today.AddDays(-1).ToString("""yyyyMMdd""")"
    

    您可以将其分配给变量:

    for /f %%a in ('powershell "[DateTime]::Today.AddDays(-1).ToString("""yyyyMMdd""")"') do set ystd=%%a
    

【讨论】:

  • 测试 Gerhard 和 npocmaka 建议让我回去
  • 如果配置文件脚本编写了任何内容,它将出现在日期之前。使用powershell -NoProfile 不运行配置文件脚本。他们不需要这样做。
  • @npocmaka :非常感谢您提供的最佳技巧,它奏效了。谢谢大家的宝贵答案
【解决方案3】:

试试这个更短的方法(也是本主题中唯一的纯批处理解决方案):

@echo off
setlocal EnableDelayedExpansion

set /A "YYYY=%DATE:~10,4%, MM=1%DATE:~4,2%-100, DD=1%DATE:~7,2%-101, Feb=28+^!(YYYY%%4)"

set "DPM= 31 31 %Feb% 31 30 31 30 31 31 30 31 30"
if %DD% equ 0 set /A "MM+=M=-1,DD=0%DPM: =+^!(MM-(M+=1))*%,YYYY-=^!MM,MM+=12*^!MM"
set /A "MM+=100,DD+=100"

set "a=%YYYY%%MM:~1%%DD:~1%"
echo %a%

如果您想知道这里发生了什么,请删除@echo off 行并运行程序...

如果您对使用的方法仍有疑问,那么您可以对+=! 运算符进行多次测试,以及括号的工作原理。

请注意,此解决方案可以减去不同的天数。但是,插入所需的调整来做到这一点并不难。

【讨论】:

  • Feb=28+^!(YYYY%%4) 在技术上并不正确,但它会在接下来的 81 年内有效
  • @LưuVĩnhPhúc:嗯,是的,但我认为这是有人会对我的代码做的最后一点! ;)。要使其在 2100 年“技术上正确”,只需使用以下公式:Feb=28+^!(YYYY%%4)-^!(YYYY%%100),并将其扩展到 2400 年(及以后)使用:Feb=28+^!(YYYY%%4)-^!(YYYY%%100)+^!(YYYY%%400)
  • 如果你能解释一下你的脚本在做什么会更好
  • @user2441441:为什么不自己测试一下呢? ;)(答案是肯定的)
猜你喜欢
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
相关资源
最近更新 更多