コマンドプロンプトで日付、時間を取得する (2)
@echo off
rem 現在の日付を取得
set date_tmp=%date:/=%
set time_tmp=%time: =0%
set yyyy=%date_tmp:~0,4%
set yy=%date_tmp:~2,2%
set mm=%date_tmp:~4,2%
set dd=%date_tmp:~6,2%
set hh=%time_tmp:~0,2%
set mi=%time_tmp:~3,2%
set ss=%time_tmp:~6,2%
set sss=%time_tmp:~9,2%
set dday=%yyyy%%mm%%dd%_%hh%%mi%_%ss%%sss%
2.1か月前の年月を取得する
set YYYYMM=%DATE:~-10,4%%DATE:~-5,2%
set /a ONEMONTHAGO=YYYYMM-1
rem 変数ONEMONTHAGO で月が0月になるのを回避する
if %ONEMONTHAGO:~-2%==00 set /a ONEMONTHAGO+=12-100
if %ONEMONTHAGO:~-2% GTR 12 set /a ONEMONTHAGO+=12-100
3.1か月前の年月を取得する
set n=1
) else (
set n=%1
if "%2"=="" (
for /F "tokens=1" %%a in ('date /t') do set orgdate=%%a
) else (
set orgdate=%2
)
:年月日の分割
set yy=%orgdate:~0,4%
set mm=%orgdate:~5,2%
set dd=%orgdate:~8,2%
set count=0
:Repeat
:月日の数値化(8進数対策)
set /a mm=1%mm%-100
set /a dd=1%dd%-100
set /a dd=%dd%-1
if %dd% NEQ 0 goto end
:月跨り処理
set /a mm=%mm%-1
if %mm% EQU 0 set mm=12&&set /a yy=%yy%-1
set /a dd=%dd%+31
if "%mm%"=="2" set /a dd=%dd%-3
if "%mm%"=="4" set /a dd=%dd%-1
if "%mm%"=="6" set /a dd=%dd%-1
if "%mm%"=="9" set /a dd=%dd%-1
if "%mm%"=="11" set /a dd=%dd%-1
:閏年処理
:4で割り切れるか?
set /a u=%yy% %% 4
if not %u%==0 goto end
:100で割り切れて、400で割り切れないか?
set /a u=%yy% %% 400
set /a v=%yy% %% 100
if %v%==0 if not %u%==0 goto end
:2月か?
if %mm% EQU 2 set /a dd=%dd%+1
:END
set mm=0%mm%
set mm=%mm:~-2%
set dd=0%dd%
set dd=%dd:~-2%
set /a count=%count%+1
set DT=%yy%/%mm%/%dd%
IF %count% NEQ %n% goto Repeat
echo %n%日前は%DT%です。
4.Xか月前の年月を取得する
rem 2日前の場合
for /F %%i in ('powershell (Get-Date^).AddDays(-2^).ToString('yyyyMMdd'^)') do (
set dayago=%%i
)
echo %dayago%
5.ファイルのタイムスタンプを取得する
for /F %%i in ('powershell (Get-ItemProperty
test.txt^).LastWriteTime.ToString('yyyyMMdd_HHmm_ss'^)') do (
set file01A=%%i
)
6.日付から曜日取得
rem 日前の場合
for /F %%i in ('powershell (Get-Date (Get-Date^).AddDays(-0^).ToString('yyyy/MM/dd'^)^).DayOfWeek^') do (
set Week1=%%i
)
set whatday=%Week1:~0,3%
7.Xか月前の年月を取得する
for /F %%i in ('powershell (Get-Date (Get-Date^).AddDays(-0^).ToString('yyyy/MM/dd'^)^).DayOfWeek^') do (
set Week1=%%i
8-1.曜日を番号で取得
rem test 曜日取得
for /F %%i in ('powershell (Get-Date (Get-Date^).AddDays(-0^).ToString('yyyy/MM/dd'^)^).DayOfWeek^') do (
set Week1=%%i
)
set whatday=%Week1:~0,3%
for /f "usebackq delims=" %%A in (`powershell.exe -Command "(Get-Date (Get-Date).AddDays(-0) ).DayOfWeek -as [int]"`) do set DAYOFWEEK1=%%A
rem 変数確認
echo %DAYOFWEEK1%
set DAYWEEK2=0%DAYOFWEEK1%_%WHATDAY%
8-2.曜日を番号で取得
for /F %%i in ('powershell (Get-Date (Get-Date^).AddDays(-0^).ToString('yyyy/MM/dd'^)^).DayOfWeek^') do (
set Week1=%%i
set whatday=%Week1:~0,3%
for /f "usebackq delims=" %%A in (`powershell.exe -Command "(Get-Date (Get-Date).AddDays(-0) ).DayOfWeek -as [int]"`) do (
set DAYOFWEEK1=%%A
)
rem 変数確認
echo %DAYOFWEEK1%
set DAYWEEK2=0%DAYOFWEEK1%_%WHATDAY%
rem vbs週番号
if %whatday%==Sat set WDAY=07SAT
if %whatday%==Fri set WDAY=06FRI
if %whatday%==Thu set WDAY=05THU
if %whatday%==Wed set WDAY=04WED
if %whatday%==Tue set WDAY=03TUE
if %whatday%==Mon set WDAY=02MON
if %whatday%==Sun set WDAY=01SUN