明天与领先零点约会?

时间:2012-12-07 10:22:44

标签: date batch-file

我希望有一种以DD / MM / YYYY格式打印明天日期的方法。我目前正在运行以下一组cmds:

@echo off

set /a d=%date:~0,2%
set /a m=%date:~3,2%
set /a y=%date:~6,4%


:loop
   set /a d+=1

   if %d% gtr 31 (
      set d=1
      set /a m+=1

      if %m% gtr 12 (
         set m=1
         set /a y+=1
      )
   )

xcopy /d:%m%-%d%-%y% /h /l "%~f0" "%~f0\" >nul 2>&1 || goto loop
echo The date tomorrow is "%d%/%m%/%y%".

pause

以上工作很好,打印“明天的日期是”2012年8月12日“。但是,我需要我的DAY和MONTH值在小于10时出现前导零。我似乎无法想象如何做到这一点。任何人都可以帮助我吗?

干杯,

EL

4 个答案:

答案 0 :(得分:1)

您抓住日/月/年套装的错误信息。 这是正确的集合

set /a d=%date:~7,2%
set /a m=%date:~4,2%
set /a y=%date:~10,4%

答案 1 :(得分:1)

你应该能够通过以下方式轻松找出哪些变量在哪里:

@echo off

:testing
set /a a=%date:~0,1%
set /a b=%date:~1,1%
set /a c=%date:~2,1%
set /a d=%date:~3,1%
set /a e=%date:~4,1%
set /a f=%date:~5,1%
set /a g=%date:~6,1%
set /a h=date:~7,1%
set /a i=%date:~8,1%
set /a j=%date:~9,1%
set /a k=%date:~10,1%
set /a l=%date:~11,1%
set /a m=%date:~12,1%
set /a n=%date:~13,1%

echo.%a%-a
echo.%b%-b
echo.%c%-c
echo.%d%-d
echo.%e%-e
echo.%f%-f
echo.%g%-g
echo.%h%-h
echo.%i%-i
echo.%j%-j
echo.%k%-k
echo.%l%-l
echo.%m%-m
echo.%n%-n

然后当你得到你想要的第一个值时,它将是

set /a var=%date:~NUM1,NUM2%

NUM1是起点NUM2是向右移动的字符数,VAR是您想要设置的变量。

或者使用FOR语句可能会更好。

我看到有人提到用户可能来自欧盟或英国。如果是这种情况,他们的日期设置将是(使用FOR):

@ECHO OFF
FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE/T') DO SET CDATE=%%B
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET mm=%%B
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET dd=%%B
FOR /F "TOKENS=2,3 DELIMS=/ " %%A IN ('echo %CDATE%') DO SET yyyy=%%B
set day=%dd%
set /a day+=01
SET date=%day%/%mm%/%yyyy%
echo.%date%
pause

答案 2 :(得分:0)

哎呀。我想通过添加:

来解决我自己的问题
IF 1%d% LSS 100 SET d=0%d%
IF 1%m% LSS 100 SET m=0%m%

xcopy之前。所以它现在应该是:

@echo off

set /a d=%date:~0,2%
set /a m=%date:~3,2%
set /a y=%date:~6,4%

:loop
   set /a d+=1

   if %d% gtr 31 (
      set d=1
      set /a m+=1

      if %m% gtr 12 (
         set m=1
         set /a y+=1
      )
   )

IF 1%d% LSS 100 SET d=0%d%
IF 1%m% LSS 100 SET m=0%m%
xcopy /d:%m%-%d%-%y% /h /l "%~f0" "%~f0\" >nul 2>&1 || goto loop
echo The date tomorrow is "%d%/%m%/%y%".

pause

希望能帮助任何有类似问题的人:)

答案 3 :(得分:0)

我测试了你的代码......它没有用 以下是批处理代码的适当部分,可以满足您的需要。

:getdate
set /a day=%date:~7,2%
IF %day% LSS 10 set day=0%day%
rem echo.The day is - %day%

set /a month=%date:~4,2%
IF %month% LSS 10 set month=0%month%
rem echo.The month is - %month%

set /a year=%date:~10,4%
rem echo.The year is - %year%

REM Setting Month / Days
set jan=31
set feb=28
set mar=31
set apr=30
set may=31
set jun=30
set jul=31
set aug=31
set sep=30
set oct=31
set nov=30
set dec=31

REM If Months are # set Month to Days
IF %month% EQU 1 set mon=%jan%
IF %month% EQU 2 set mon=%feb%
IF %month% EQU 3 set mon=%mar%
IF %month% EQU 4 set mon=%apr%
IF %month% EQU 5 set mon=%may%
IF %month% EQU 6 set mon=%jun%
IF %month% EQU 7 set mon=%jul%
IF %month% EQU 8 set mon=%aug%
IF %month% EQU 9 set mon=%sep%
IF %month% EQU 10 set mon=%oct%
IF %month% EQU 11 set mon=%nov%
IF %month% EQU 12 set mon=%dec%

echo.Today's Date is %month%/%day%/%year%

set /a day+=1
if %day% GTR %mon% set /a month+=1
if %day% GTR %mon% set day=1
IF %day% LSS 10 set day=0%day%
IF %month% GTR 12 set month=1& set /a year+=1
IF %month% LSS 10 set month=0%month%

echo.Tomorrow's Date is %month%/%day%/%year%

这将设置一个月内的日期(闰年除外),并且应该解决您遇到的任何问题,假设您还不知道,但如果一个月只有30天,您当前的代码会将当天设置为31 ,无论是2月还是只有28天。

你必须在这里插入你的其他代码,因为我不确定你的循环在做什么,否则我只是改变了d = day,m = month和y = year(mon是比较中的天数)月)。

祝你好运,HTH