2017-12-13 5 views
0

バッチファイルを使用して2日前の日付を取得するためにコードを変更しようとしています。この例では、私はしかし、今日の日付バッチスクリプトCDMを使用して2日前の日付を取得する簡単な方法はありますか?

for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set datetime=%%I 
set LogDateTime=%datetime:~0,8%_%datetime:~8,6% 

を取ることができ、私は2日前のデータを取得するためにコードを変更する方法がわかりません。私はPowerShellを探しているわけではなく、他の解決策は探していません。バッチのみを使用する必要があります。

+1

悲しいことに、純粋なバッチで日付/時刻を計算する方法はありません。バッチとバッチのみを使用する必要がある場合は、[this](https://stackoverflow.com/questions/11210997/windows-console-date-math?noredirect=1&lq=1)を読んでください。しかし、Powershellまたは[embedded vbs ](https://stackoverflow.com/questions/22191084/how-to-get-3-days-past-date-from-current-date-using-batch-file?rq=1) – Stephan

+0

日付/時刻の計算については私はJavaScript、VBScript、PowerShellのような別の言語からそのような機能を貸し出しています。とにかく、このサイトを検索すれば、多くの例が見つかります。 – aschipfl

答えて

6

バッチファイルで日付を計算するために、日付をユリウス日に変換する必要があります。ここには2つの機能があります。 1つは現在の日付を取得し、次に1つはその日付の計算を行います。

@echo off 
setlocal 

REM Get the current date 
REM Will return variables YY, YYYY, MM, DD, HH, Min and Sec 
Call :GetDateTime 

REM Add or Subtract from the current date 
REM Must use + or - symbol 
REM Revised date will be assigned to RetVar 
Call :AddSubDate %YYYY% %MM% %DD% -2 past 

echo Past  : %past% 
pause 
GOTO :EOF 

:AddSubDate Year Month Day <+/-Days> RetVar 
setlocal & set a=%4 
set "yy=%~1"&set "mm=%~2"&set "dd=%~3" 
set /a "yy=10000%yy% %%10000,mm=100%mm% %% 100,dd=100%dd% %% 100" 
if %yy% LSS 100 set /a yy+=2000 &rem Adds 2000 to two digit years 
set /a JD=dd-32075+1461*(yy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yy+4900+(mm-14)/12)/100)/4 
if %a:~0,1% equ + (set /a JD=%JD%+%a:~1%) else set /a JD=%JD%-%a:~1% 
set /a L= %JD%+68569,  N= 4*L/146097, L= L-(146097*N+3)/4, I= 4000*(L+1)/1461001 
set /a L= L-1461*I/4+31, J= 80*L/2447, K= L-2447*J/80,  L= J/11 
set /a J= J+2-12*L,  I= 100*(N-49)+I+L 
set /a YYYY= I, MM=100+J, DD=100+K 
set MM=%MM:~-2% & set DD=%DD:~-2% 
set ret=%YYYY: =%%MM: =%%DD: =% 
endlocal & set %~5=%ret% 
exit /b 

:GetDateTime Year Month Day Hour Minute Second 
@echo off & setlocal 
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%" 
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" 
(ENDLOCAL 
    set "YY=%YY%" 
    set "YYYY=%YYYY%" 
    set "MM=%MM%" 
    set "DD=%DD%" 
    set "HH=%HH%" 
    set "Min=%Min%" 
    set "Sec=%Sec%" 
) 
exit /b 
+0

それはとても素敵です、ありがとうございます。 「どのキーを押して続行する」を無効にするには?私は値を返す必要があるので?なぜ私はsystem32にリダイレクトしていますか?それが現在のフォルダに残っている場合 –

関連する問題