如何在批处理脚本中生成日期前四天的日期? [关闭]

2023-12-29

我想在批处理脚本中生成日期前四天的日期。我检查了可用的解决方案,但它们看起来很复杂。任何帮助将不胜感激。


我强烈同意@JosefZ,日期数学是一个复杂的问题。 Vbscript 和 PowerShell 将其合并,并且像黑匣子一样使用和依赖。
即使批处理只有 32 位有符号整数数学,这也足以解决这个问题。当打包到存储在批次末尾的可调用子例程中时,它不会太令人恼火。

甚至有一种方法可以将它们放入路径中某处的批处理库中,并且只需要一个小存根即可调用它们。
所以这里是只有批处理代码的变体(与 powershell oneliner 相比,开销很大) 对日期格式和语言没有限制。

输出:

Today Year: 2016  Month: 12  Day: 08
-38   Year: 2016  Month: 10  Day: 31

Batch

@Echo off
Call :GetDate yy mm dd
Echo Today Year: %yy%  Month: %mm%  Day: %dd%
Set /A n=-38
Call :DateAdd yy mm dd %n%
Echo %n%   Year: %yy%  Month: %mm%  Day: %dd%
Pause
Goto :Eof

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:GetDate yy mm dd
::
:: Func: Loads local system date components into args 1 to 3.
:: 
:: Args: %1 var to receive year,                   4 digits (by ref)
::       %2 var to receive month,     2 digits,    01 to 12 (by ref)
::       %3 Var to receive day of month, 2 digits, 01 to 31 (by ref)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
SetLocal EnableExtensions
for /f "tokens=1-3 delims=.+-" %%A in (
  'wmic os get LocalDateTime^|findstr ^^[0-9]'
    ) do Set _DT=%%A
Set "yy=%_DT:~0,4%"&Set "MM=%_DT:~4,2%"&Set "dd=%_DT:~6,2%"
endlocal&set %1=%yy%&set %2=%MM%&set %3=%dd%&goto :EOF
:: GetDate.cmd :::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DateAdd yy mm dd #days
::
:: Func: Adds/subs Days from/to a given date by converting to a 
::       Julian Day adding the offset and converting back.
:: Args:
::  %1 year  component used to create JD,        4 digits  (by ref)
::  %2 month component used to create JD, leading zero ret (by ref)
::  %3 day of month   used to create MJD, leading zero ret (by ref)
::  %4 days offset may be positive or negative (by val)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
SetLocal
Call set /A "yy=%%%1%%,mm=100%%%2%% %%%%100,dd=100%%%3%% %%%%100"
Set /A jd=(1461*(yy+4800+(mm-14)/12))/4
Set /A jd=jd+(367*(mm-2-12*((mm-14)/12)))/12
Set /A jd=jd-(3*((yy+4900+(mm-14)/12)/100))/4,jd=jd+dd-32075
Set /A jd=jd+%4
set /A l=jd+68569,n=(4*l)/146097,l=l-(146097*n+3)/4
Set /A i=(4000*(l+1))/1461001,l=l-(1461*i)/4+31,j=(80*l)/2447
Set /A dd=l-(2447*j)/80,l=j/11,mm=j+2-(12*l),yy=100*(n-49)+i+l
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
Endlocal&set %1=%yy%&set %2=%mm%&set %3=%dd%&Goto :Eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在批处理脚本中生成日期前四天的日期? [关闭] 的相关文章

随机推荐

  • 解析 C 中的命令行参数

    我正在尝试编写一个程序 可以在 C 中逐行 逐字或逐字符地比较两个文件 它必须能够读取命令行选项 l w i or 如果选项是 l 它逐行比较文件 如果选项是 w 它逐字比较文件 如果选项是 它会自动假定下一个参数是第一个文件名 如果选项是
  • 使用 Node.js API 的 Keycloak 通过 Docker 失败

    我有一个与 Keycloak 集成的 Node js Rest API 当我在没有 Docker 的情况下在本地运行 API 时 一切正常 但每当我通过 docker 镜像运行 API 时 都会收到错误 403 禁止 我已经确保我的容器可以
  • 如何用Java获取cookies?

    如何使用 Java 从网页获取 cookie 我的意思是只有Java而不是Servlet等 您可以使用java net URLConnection http download oracle com javase 6 docs api jav
  • 模态对话框或 div 覆盖框架集?

    我有一个 html 页面 其中有几个框架 也是嵌套框架集 我想在所有这些框架上显示叠加层以显示模式框 灯箱 那可能吗 我知道我知道框架集不好用 但是我想尝试一下 模式对话框示例 http flowplayer org tools demos
  • 使用 javascript 分割字符串

    我有一个像 a b c e 这样的字符串 注意前面多了一个分号e 我想要将字符串拆分成a b c e 但它会像这样分裂a b c e 我的代码是 var new arr str split 我在这里可以做什么才能得到我想要的结果 Regar
  • 通过 Google Cloud Storage 和负载均衡器提供 React 应用程序服务,将任何 url 映射到索引?

    我正在使用 Google Cloud Storage 和 Loadbalancer 设置 React 应用程序前端 在构建过程中 index html 和 javascript 文件被上传到云存储中 负载均衡器指向后端存储桶 如果我转到 h
  • 理解 NumPy 的卷积

    计算简单移动平均线时 numpy convolve似乎可以完成这项工作 问题 使用时是如何计算的np convolve values weights valid 当文档提到convolution product is only given
  • 如何在Python中抑制控制台输出?

    我正在使用 Pygame SDL 的操纵杆模块从游戏手柄获取输入 每次我打电话给它get hat 方法将其打印到控制台 这是有问题的 因为我使用控制台来帮助我调试 现在它被淹没了SDL JoystickGetHat value 0 每秒60
  • 在 Glassfish v3 中,Servlet 请求无明显原因地按顺序执行

    我正在使用 Glassfish 3 Web 配置文件 无法让 http 工作线程在 servlet 上同时执行请求 这就是我观察问题的方式 我制作了一个非常简单的 servlet 它将当前线程名称写入标准输出并休眠 10 秒 protect
  • 信号处理程序问题

    我们一直在讨论 C Unix 中的信号 教授在课堂上举了一个让我困惑的例子 在下面的 main 方法中 使用包含的参数调用信号函数 main signal SIGALRM handler install handler handler 是一
  • get()在Guava的缓存中是线程安全的操作吗?

    我发现使用 CacheLoader 操作的 put 和 get 在底层使用了可重入锁 但为什么 getIfPresent 操作没有实现这一点 get 由 getIfPresent 使用 Nullable V get Object key i
  • setalloccol(x) 中的错误:详细必须为 TRUE 或 FALSE --- 未知错误源

    我在 Rstudio 中遇到了一个非常奇怪的问题 我不知道如何修复它 因为我不知道哪个函数 包导致了它 我昨晚运行了整个代码 它运行得很好 但现在我不断遇到错误Error in setalloccol x verbose must be T
  • 如何从“MySQL 创建表”查询字符串中获取列名?

    我想用 PHP 编写一个脚本 以字符串形式获取 MySQL 创建表 查询 并将列名及其数据类型存储在数组中 例如 输入字符串 CREATE TABLE test col1 INT 10 NOT NULL col2 VARCHAR 50 NO
  • 无模式 JDialog 不显示内容

    Java SE 6 我正在尝试创建一个弹出对话框 在我的程序执行一些耗时的工作时显示 请稍候 消息 为此 我选择使用无模式 JDialog 以便程序在 JDialog 可见时继续运行并正常工作 如果您使用模态 JDialog 则程序将暂停
  • Windows 上的 PHP 诅咒

    PHP 中是否有与 ncurses 相当的 Windows 版本 我创建了一个 CLI 脚本 希望以一种很好的方式显示各种统计信息 当前处理的记录 完成百分比等 而不向 cmd exe 窗口输出负载和大量文本 ncurses 扩展不适用于
  • 计算整数的持久数

    我正在尝试编写一个执行以下操作的代码 将整数的数字相乘并继续该过程给出 乘积序列总是得出令人惊讶的结果 一位数 例如 715 gt 35 gt 15 gt 5 88 gt 64 gt 24 gt 8 27 gt 14 gt 4 达到个位数所
  • 使用 map() 估计多个“lm”模型并在一个表中返回输出

    我需要在同一数据集上估计多个线性模型 并将回归结果全部放入一张表中 对于可重现的示例 这里是使用的简化mtcars formula 1 mpg disp formula 2 mpg log disp formula 3 mpg disp h
  • 我可以使用 System.Linq.Expressions 动态生成异步方法吗?

    我知道编译器无法将异步 lambda 表达式转换为表达式树 但是是否可以手动生成表达式树 var expr Expression Lambda
  • 模拟实体框架模型?

    是否可以模拟 EF 模型 以便我可以测试使用模型类的代码 而无需删除散布在我的项目中的 LINQ to Entities 代码 或者是否需要建立一个测试数据库来让模型命中 您可以将 LINQ 代码包装在数据访问对象 http en wiki
  • 如何在批处理脚本中生成日期前四天的日期? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在批处理脚本中生成日期前四天的日期 我检查了可用的解决方案 但它们看起来很复杂 任何帮助将不胜感激 我强烈同意 JosefZ 日期