2012-12-07 58 views
0

我期待有一種以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日’不過,我需要我的兩個星期和月份值出來。帶前導零的時候,不到10我不能出現弄清楚如何可以做到這一點。誰能幫幫我?

乾杯,

EL

回答

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 

希望幫助任何人只要有一個類似的問題:)

+1

我相信你已經騙了你自己。幾個月可以有28,29,30或31天。你的代碼假設所有月份都有31天。一個好的解決方案是將日期轉換爲儒略日期,加1,然後轉換回公曆日期。請參閱[DosTips:date2jdate,:jdate和:jdate2date函數](http://www.dostips.com/DtTipsDateTime.php#Function.date2jdate)。 – dbenham

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

1

你抓住了集日/月/年的錯誤信息。 這裏是正確的套

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

這可能取決於語言環境。 – mousio

+0

我想這是事實,看起來他是英國人或歐洲人,根據他如何設置他的日/月/年不同於美國系統的月/日/年。好決定 – 2012-12-10 13:39:26

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