0

明日の日付を DD/MM/YYYY 形式で印刷する方法を探しています。現在、次の一連のコマンドを実行しています。

@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 未満の場合は DAY と MONTH の両方の値に先行ゼロを付ける必要があります。誰でも私を助けることができますか?

乾杯、

EL

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 ステートメントを使用する方がうまくいく場合があります。

ユーザーが EU または英国出身である可能性があると誰かが言及しているのを見ました。その場合、日付の設定は次のようになります (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

あなたのコードをテストしました... 動作しませんでした。これは、必要なものに対して動作するバッチ コードの適切な部分です。

: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 日しかありません。

あなたのループが何をしているのかわからないので、ここに他のコードを挿入する必要があります。

がんばれ、HTH

于 2012-12-07T21:39:54.167 に答える
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 に答える