4

今日の日付をうまく作成するバッチファイルがあります。ここで、明日の日付を表示するように更新する必要があります。どんな助けでも大歓迎です:

@echo off
set TimeStamp=12:00:00


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 date="%yyyy%-%mm%-%dd% %TimeStamp%"

echo %date%
4

4 に答える 4

6

「問題」は、2 月やうるう年などについて考える必要があることです。

Paul Tomasi は、彼のサイトに非常に優れたスクリプトを投稿しており、フローチャートを含めて完全に説明しています。

::================================================
:: TOMORROW.BAT - Written by Paul Tomasi (c)2010
::
:: Function to return tomorrow's date
::================================================
@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 %d%/%m%/%y%

::------------------------------------------------

Paul Tomasi によるフローチャートのバッチ時間計算

つまり、これか、ハイブリッド バッチ スクリプトに飛び込むかのどちらかです。

お役に立てれば!

于 2013-08-08T18:30:53.040 に答える
3
@echo off &SETLOCAL
SET "today=%date%"
ECHO(today is       %today%
CALL:DateToJDN %today% todayNo
ECHO(this is day no.        %todayNo%
SET /a tomorrowNo=todayNo+1
ECHO(tomorrow is day no.    %tomorrowNo%
CALL:JDNToDate %tomorrowNo% tomorrow
ECHO(tomorrow is        %tomorrow%
GOTO:EOF

rem Convert the date to Julian Day Number

:DateToJDN dd.mm.yyyy jdn=
setlocal
set date=%1
set /A yy=%date:~-4%, mm=1%date:~-7,2% %% 100, dd=1%date:~-10,2% %% 100
set /A a=mm-14, jdn=(1461*(yy+4800+a/12))/4+(367*(mm-2-12*(a/12)))/12-(3*((yy+4900+a/12)/100))/4+dd-32075
endlocal & set %2=%jdn%
exit /B

rem Convert Julian Day Number back to date

:JDNToDate jdn dd.mm.yyyy=
setlocal
set /A l=%1+68569,n=(4*l)/146097,l=l-(146097*n+3)/4,i=(4000*(l+1))/1461001,l=l-(1461*i)/4+31,j=(80*l)/2447,dd=l-(2447*j)/80,l=j/11,mm=j+2-(12*l),yy=100*(n-49)+i+l
if %dd% lss 10 set dd=0%dd%
if %mm% lss 10 set mm=0%mm%
endlocal & set %2=%dd%.%mm%.%yy%
exit /B

endlocal

今日は 2013 年 8 月 8 日です
これは日番号です。2456513
明日はNo. 2456514
明日は 09.08.2013 です
于 2013-08-08T18:56:49.903 に答える
1

申し訳ありませんが、バッチ コードで何をしているのかわかりません。これについてコメントできますか?12:00 のタイムスタンプが必要なのはなぜですか?

私のドイツ語版では、次のように説明されています。

"eingeschaltet-- 12:00:00"

走った後

(eingeschaltet は「オンにする」または「オンにする」などを意味します)

Powershell はオプションですか? あなたはあなたの正気を救うでしょう...

$Today = Get-Date
$Tomorrow = $Today.AddDays(1)

Write-Host "Tomorrow: $Tomorrow"

はい、バッチから Powershell スクリプトを開始できます。

Powershell を起動し、「Set-ExecutionPolicy Unrestricted」と入力します。

(または、他の人がこれを実行する必要がある場合は、スクリプトに署名してください) Powershell を閉じることができます。この 1 回限りの手順で必要なだけです。

バッチ内 (スクリプトの名前が「Add-Days.ps1」であると仮定)

set script="Add-Days.ps1"
powershell.exe -NoProfile -File "%script%"
于 2013-08-08T18:24:43.500 に答える