0

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

@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

上面的效果很好,打印“明天的日期是“8/12/2012”。但是,当小于 10 时,我需要我的 DAY 和 MONTH 值都带有前导零。我似乎无法弄清楚这是怎么回事可以的。有人能帮帮我吗?

干杯,

埃尔

4

4 回答 4

1

您为日/月/年的集合获取了错误的信息。这是正确的集合

set /a d=%date:~7,2%
set /a m=%date:~4,2%
set /a y=%date:~10,4%
于 2012-12-07T21:48:17.927 回答
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
于 2012-12-10T15:14:25.200 回答
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

希望对有类似问题的人有所帮助:)

于 2012-12-07T15:12:03.817 回答
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,无论是否据说二月,只有28天。

您必须在此处插入其他代码,因为我不确定您的循环在做什么,否则我只是更改了 d = 日、m = 月和 y = 年(mon 正在比较当月的天数)。

祝你好运,HTH

于 2012-12-07T21:39:54.167 回答