我正在尝试获得StartDate (今天)和EndDate (昨天)。我一直在努力保持一天的数字格式正确。然而,我注意到,系统不喜欢有前导零,当它从"09“中减去1时就失败了,但是与"10”非常完美。我怎么才能解决这个问题?
echo off
REM CurrentDate (END DATE) -------------------------------------------------------------
Set dd=%date:~4,2%
Set mm=%date:~7,2%
Set yyyy=%date:~10,4%
set END_DATE=%yyyy%-%mm%-%dd% 00:00 AM
echo %END_DATE%
REM CurrentDate - 1 (START DATE) ------------------------------------------------------------
set m1dd=%date:~4,2%
set m1dd=09
echo %m1dd%
set /A m1dd -= 1
echo %m1dd%
Set m1dd=0%m1dd%
echo %m1dd%
Set m1dd=%m1dd:~-2%
echo %m1dd%
set START_DATE=%yyyy%-%mm%-%m1dd% 00:00 AM
echo %START_DATE%
pause发布于 2017-09-05 16:49:13
这个批处理文件使用XCOPY命令来验证该日期实际上是一个有效日期,因为您要从YYYYMMDD中减去1。
@echo off
setlocal
set rand=%random%
md "dummy%rand%\empty%rand%"
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set /a y=%dt:~0,4%
set /a m=1%dt:~4,2%
set /a d=1%dt:~6,2%
REM set the number of days to substract
SET DAYS=1
FOR /L %%G IN (1,1,%days%) DO CALL :loop
set subdate=%y%%m:~-2%%d:~-2%
echo Today is: %dt:~0,8%
echo Yesterday was: %subdate%
rd /s /q "dummy%rand%"
pause
endlocal
GOTO :EOF
:loop
set /a d-=1
if %d% lss 101 (
set d=131
set /a m-=1
if %m% lss 101 (
set m=112
set /a y-=1
)
)
xcopy /d:%m:~-2%-%d:~-2%-%y% /t "dummy%rand%\empty%rand%" "dummy%rand%" >nul 2>&1 || goto loop
GOTO :EOF输出
Today is: 20170905
Yesterday was: 20170904
Press any key to continue . . .发布于 2017-09-05 16:57:23
您可以从批处理文件中使用powershell:
@Echo Off
Set "TS=.ToString('yyy-MM-dd') + \" 00:00 AM\""
For /F "UseBackTokens=1*Delims=@" %%A In (`
PowerShell "(Get-Date)%TS% + \"@\" + (Get-Date).AddDays(-1)%TS%"`
) Do Set "TD=%%A" & Set "YD=%%B"
Echo %%TD%% = %TD%
Echo %%YD%% = %YD%
Timeout -1发布于 2017-09-05 16:10:01
计算日期的方式并不理想。要获得更好的日期计算,可以参考此链接。
如果您只是在寻找使当前代码运行的快速修补程序,只需按以下方式删除前导零:
echo off
REM CurrentDate (END DATE) -------------------------------------------------------------
Set dd=%date:~4,2%
Set mm=%date:~7,2%
Set yyyy=%date:~10,4%
set END_DATE=%yyyy%-%mm%-%dd% 00:00 AM
echo %END_DATE%
REM CurrentDate - 1 (START DATE) ------------------------------------------------------------
set m1dd=%date:~4,2%
set m1dd=09
set /a m1dd=100%m1dd% %% 100
echo %m1dd%
set /a m1dd -= 1
echo %m1dd%
Set m1d=0%m1dd%
echo %m1dd%
Set m1d=%m1dd:~-2%
echo %m1dd%
set START_DATE=%yyyy%-%mm%-%m1dd% 00:00 AM
echo %START_DATE%
pausehttps://stackoverflow.com/questions/46058962
复制相似问题