标题: [日期时间] 批处理如何获取昨天/前一天的日期 [打印本页]
作者: ywjbycd 时间: 2014-9-1 11:15 标题: 批处理如何获取昨天/前一天的日期
本帖最后由 pcl_test 于 2017-6-7 10:42 编辑
@echo off
set dt=%date:~,10%
set de=%dt:~,8%
set dt=%dt:~-2%
set /a dt-=1
这是从网上找的一个取前一天时间的例子.但是到了今天没法使用了.因为今天是2014-09-01,前一天是2014-08-31.这个取完了是2014-09-0.
而且我把日期调整成2014-09-02 在看结果 是2014-09-1 少了一个0 正确的返回结果应该是2014-09-01.
求各路大神给个更好的例子.
作者: yu2n 时间: 2014-9-1 11:34
回复 1# ywjbycd
VBS 版(GetDateBefore.vbs):- arrDate = Split(FormatDateTime(DateAdd("d", -1, Now()), vbShortDate), "-")
- If Len(arrDate(1)) = 1 Then arrDate(1) = "0" & arrDate(1)
- If Len(arrDate(2)) = 1 Then arrDate(2) = "0" & arrDate(2)
- WScript.Echo Join(arrDate, "-")
复制代码
BAT 版(GetDateBefore.bat):- @echo off
-
- (echo,arrDate = Split^(FormatDateTime^(DateAdd^("d", -1, Now^(^)^), vbShortDate^), "-"^)
- echo,If Len^(arrDate^(1^)^) = 1 Then arrDate^(1^) = "0" ^& arrDate^(1^)
- echo,If Len^(arrDate^(2^)^) = 1 Then arrDate^(2^) = "0" ^& arrDate^(2^)
- echo,WScript.Echo Join^(arrDate, "-"^) ) > "%temp%\GetDateBefore.vbs"
- CScript //NoLogo "%temp%\GetDateBefore.vbs"
-
- pause
复制代码
作者: ywjbycd 时间: 2014-9-1 11:55
谢谢大神.测试成功.取值2014-01-01 也会返回 2013-12-31.
作者: ywjbycd 时间: 2014-9-1 11:57
但是大神,请问我echo那个会出现这个值呢?
就像我发的那个例子 我会echo %dt%
你发的这个 我要echo哪个呢?
作者: Batcher 时间: 2014-9-1 12:22
http://bbs.bathome.net/thread-3330-1-1.html
作者: yu2n 时间: 2014-9-1 13:12
回复 4# ywjbycd
CMD语句中,一般获取命令行程序的结果,使用 for /f 。- @echo off
-
- (echo,arrDate = Split^(FormatDateTime^(DateAdd^("d", -1, Now^(^)^), vbShortDate^), "-"^)
- echo,If Len^(arrDate^(1^)^) = 1 Then arrDate^(1^) = "0" ^& arrDate^(1^)
- echo,If Len^(arrDate^(2^)^) = 1 Then arrDate^(2^) = "0" ^& arrDate^(2^)
- echo,WScript.Echo Join^(arrDate, "-"^)
- ) > "%temp%\GetDateBefore.vbs"
-
- for /f "tokens=1,* delims=??" %%i in ('CScript //NoLogo "%temp%\GetDateBefore.vbs"') Do (
- set strDateBefore=%%i
- )
-
- echo,%strDateBefore%
-
- pause
复制代码
作者: ywjbycd 时间: 2014-9-1 13:17
嗯 好的.再次感谢各位大神的帮助.
作者: ljhtianlin 时间: 2014-9-5 16:01
运行不了。为什么会出现下标越界。。
作者: yu2n 时间: 2014-9-5 18:49
本帖最后由 yu2n 于 2014-9-5 18:56 编辑
回复 8# ljhtianlin
可能是日期格式问题,导致分隔符生成的数组越界。
这个里面有一个比较好的方法来解决这个问题。
http://bbs.bathome.net/thread-3330-1-1.html
另外,我也写了一个函数修正这个问题。效果如下:- 今天日期:2014-09-05
- 距离今天 12 天之前的日期:2014-08-24
- 距离今天 16 天以后的日期:2014-09-21
- 距离日期 2012-12-25 的 12 天之前的日期:2012-12-13
- 距离日期 2012-12-25 的 16 天以后的日期:2013-01-10
- 请按任意键继续. . .
复制代码
代码:- @echo off
-
- Call :_GET_DAY_ADD
- echo 今天日期:%DAY_ADD%
- echo.
-
- Call :_GET_DAY_ADD -12
- echo 距离今天 12 天之前的日期:%DAY_ADD%
- echo.
-
- Call :_GET_DAY_ADD +16
- echo 距离今天 16 天以后的日期:%DAY_ADD%
- echo.
-
- Call :_GET_DAY_ADD -12 2012-12-25
- echo 距离日期 2012-12-25 的 12 天之前的日期:%DAY_ADD%
- echo.
-
- Call :_GET_DAY_ADD +16 2012-12-25
- echo 距离日期 2012-12-25 的 16 天以后的日期:%DAY_ADD%
- echo.
-
- pause
- goto :eof
-
-
- :: 获取指定日期前
- goto :eof
- :_GET_DAY_ADD
- (echo d1 = Now^(^)
- echo d2 = d1
- if not "%~2"=="" echo d1 = Replace^("%~2", ".", "-"^)
- if not "%~1"=="" echo d2 = DateAdd^("d", Eval^("%~1"^), d1^)
- echo d2 = Right^(Year^(d2^),4^) ^& "-" ^& Right^("0" ^& Month^(d2^),2^) ^& "-" ^& Right^("0" ^& Day^(d2^),2^)
- echo WScript.Echo d2) > "%temp%\DayAdd.vbs"
- for /f "tokens=1,* delims=??" %%i in ('CScript //NoLogo "%temp%\DayAdd.vbs"') Do (
- set DAY_ADD=%%i
- )
- goto :eof
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |