機能別/日時を得る
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#navi(機能別)
''日時を環境変数に得る''
#contents
/////////////////////////////////////////////////////////...
*概要 [#w790739f]
環境変数に日時を得たいケースがある。
+時刻を得る
+日付を得る
+日付・時刻両方を得る
の3パターンについて、dateやtimeコマンドを使う方法、
環境変数DATEやTIMEを使う方法それぞれについて記す。
地域のオプションで日付を和暦にしたり、時刻を12時間制にし...
上記コマンドの結果や環境変数の値も影響を受ける((TIME環境...
-ここでは地域オプションで、西暦・24時間制に設定していて、
得たい日時も西暦・24時間制だという前提とする。~
-日付の区切り文字はデフォルトでは / だが、JIS/ISO規格では...
-時刻の区切り文字も変更できるが : 以外にするとは考えられ...
日時機能については、[[機能差異/Win2KとWinXP]]も参照。
/////////////////////////////////////////////////////////...
*時刻をtime/tコマンドで得る [#w8b2c88f]
time/tコマンドで得られる結果の書式は HH:mm で秒は得られな...
分までで十分な場合はこの方法が簡単である。
for /f "delims=: tokens=1,2" %%A in ('time/t') do set HH...
for /f "delims=: tokens=1,2" %%A in ('time/t') do set HH...
/////////////////////////////////////////////////////////...
*日付をdate/tコマンドで得る [#c7196ce1]
date/tコマンドで得られる結果の書式は yyyy/mm/dd で、
Win2Kの場合は空白をはさんで曜日が後ろに付く。
for /f "tokens=1-3 delims=/- " %%A in ('date/t') do set ...
for /f "tokens=1-3 delims=/- " %%A in ('date/t') do set ...
空白もデリミタにする必要があるので、delims=/- と " の間に...
/////////////////////////////////////////////////////////...
*時刻をTIME環境変数から得る [#ja3e2234]
秒まで得たい場合は、time/tコマンドでは得られない。
set HHMMSS=%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
というコードを目にすることがあるが、これには2点問題がある。
+タイミングによって誤った時刻が得られる
+0〜9時台は先頭が0でなく空白となる
1.の理由だが、
:loop
set X=%TIME%/%TIME%
if %X:~0,11% == %X:~-11% goto loop
を実行すると、しばらくしてループから抜ける。
つまり、同一の文でも複数回 %TIME% を記述するとその度に最...
従って、例えば18時頃に前記のスクリプトを実行した場合、
最初の %TIME% 参照時に 17:59:59.99 で、2,3回目に 18:00:00...
得られる HHMMSS は 170000と、実際の時間と1時間ずれること...
set T=%TIME: =0%
set HHMMSS=%T:~0,2%%T:~3,2%%T:~6,2%
のように、一旦別の環境変数にセットすることで1.の問題を回...
その時、空白 を 0 に置換することで2.の問題も処理できる。
/////////////////////////////////////////////////////////...
*日付をDATE環境変数から得る [#o423736b]
Win2Kでは、yyyy/mm/dd の前に曜日が付くため、Win2KとWinXP...
スクリプトにしたければ、文字位置を後ろから数えて指定する。
前述の時刻と同様、レアケースだが日が変わるタイミングで実...
誤った日付となる可能性があるため、一旦別の環境変数にセッ...
ただし、定時刻起動の処理など明らかに0時直前に実行されるこ...
%DATE%のまま使っても問題ない((他のページの例ではこの様な...
set D=%DATE%
set YYYYMMDD=%D:~-10,4%%D:~-5,2%%D:~-2%
デリミタが / であるという前提を置いて良ければ、
set D=%DATE:/=%
set YYYYMMDD=%D:~-8%
さらに、WinXPに限定してよければ、
set YYYYMMDD=%DATE:/=%
でよい。
/////////////////////////////////////////////////////////...
*日時を得る [#d519e3dd]
日時を同一コマンドや同一環境変数で得ることは出来ないので、
日付と時刻を別々のタイミングで取得する必要がある。~
日が変わるタイミング、例えば 2005/01/31 23:59:59.99 に日...
2005/02/01 00:00:00.00 に時刻を得ると、結果は 2005/01/31 ...
実際とは1日ずれてしまう。従って、日をまたがっていないチェ...
:retry
set D=%DATE%
set T=%TIME: =0%
if not %D% == %DATE% goto retry
set YYYYMMDDHHMMSS=%D:~-10,4%%D:~-5,2%%D:~-2%%T:~0,2%%T:...
date/t や time/t コマンドを使うことも出来るがどうせ一旦別...
セットする必要があるので、環境変数を使うほうが簡単である。
別の方法として、VBSのNow()関数を使って日付・時刻を同時に...
echo WScript.Echo Now() > tmp.vbs
for /f "tokens=1-6 delims=/-: " %%A in ('cscript //nolog...
) do set YYYYMMDDHHMMSS=%%A%%B%%C%%D%%E%%F
del tmp.vbs
/////////////////////////////////////////////////////////...
//*年月日の順序が変更されれている状況で日付を得る [#t0415...
//アメリカ式、ヨーロッパ式のように、年月日の順を変更して...
//年月日を得る方法として、date コマンドの2行目を参照する...
//年月日の順序を変更している場合、date コマンドの2行目の、
//
//>新しい日付を入力してください: (年-月-日)
//
//のカッコの中の文字順序がそれに応じて変わることを利用す...
//
// for /f "tokens=1-3 delims=/- " %%X in do ('date/t') (
// for /f "tokens=2-4 skip=1 delims=/-() " %%A in ('dat...
// set %%A=%%X& set %%B=%%Y& set %%C=%%Z
// ))
// set YYYYDDMM=%年%%月%%日%
//
//set文では、環境変数 %年% %月% %日% にそれぞれ対応する値...
//
/////////////////////////////////////////////////////////...
*年月日の書式が変更されれている状況で日付を得る (WinXP)[#...
コントロールパネルでアメリカ式、ヨーロッパ式のように、
年月日の順を変更している場合、
また曜日表示を指定している場合にでも年月日を得る方法を考...
なお、和暦にも対応するのは可能だろうがレアケースだと思う...
WinXPの場合は、reg コマンドでレジストリの値が取得できるの...
コントロールパネルの地域と言語のオプションで設定した日付...
for /f "skip=4 tokens=2*" %%A in ('reg query "HKCU\Contr...
書式には空白が含まれる可能性があるので、tokens=2* として3...
これで得た FMT を使って、以下のように YYYYMMDD の書式で日...
delims= には書式に含まれる可能性のある固定文字がこれ以外...
set YYYY=&set YY=&set MM=&set M=&set DD=&set D=&set DDD=
for /f "tokens=1-4 delims=/-() " %%A in ("%FMT%") do (
for /f "tokens=1-4 delims=/-() " %%a in ("%DATE%") do (
set %%A=%%a&set %%B=%%b&set %%C=%%c
if not "%%D"=="" set %%D=%%d
))
if not "%YY%"=="" set YYYY=20%YY%
if not "%M%"=="" set MM=0%M%
set MM=%MM:~-2%
if not "%D%"=="" set DD=0%D%
set DD=%DD:~-2%
set YYYYMMDD=%YYYY%%MM%%DD%
/////////////////////////////////////////////////////////...
*年月日の書式が変更されれている状況で日付を得る (Win2000)...
Win2000には reg コマンドは無いが、VBS+WSHを使えばレジスト...
ただし %DATE% や date/t の書式そのままでないので([[機能差...
曜日部分に工夫が必要。
>tmp.vbs echo Set WShell=WScript.CreateObject("WScript....
>>tmp.vbs echo WScript.Echo WShell.RegRead("HKCU\Control...
for /f "delims=" %%A in ('cscript //nologo tmp.vbs') do ...
del tmp.vbs
set FMT=ddd %FMT:ddd=%
以降は WinXP と同じ方法で年月日を取得できる。
/////////////////////////////////////////////////////////...
#navi(機能別)
終了行:
#navi(機能別)
''日時を環境変数に得る''
#contents
/////////////////////////////////////////////////////////...
*概要 [#w790739f]
環境変数に日時を得たいケースがある。
+時刻を得る
+日付を得る
+日付・時刻両方を得る
の3パターンについて、dateやtimeコマンドを使う方法、
環境変数DATEやTIMEを使う方法それぞれについて記す。
地域のオプションで日付を和暦にしたり、時刻を12時間制にし...
上記コマンドの結果や環境変数の値も影響を受ける((TIME環境...
-ここでは地域オプションで、西暦・24時間制に設定していて、
得たい日時も西暦・24時間制だという前提とする。~
-日付の区切り文字はデフォルトでは / だが、JIS/ISO規格では...
-時刻の区切り文字も変更できるが : 以外にするとは考えられ...
日時機能については、[[機能差異/Win2KとWinXP]]も参照。
/////////////////////////////////////////////////////////...
*時刻をtime/tコマンドで得る [#w8b2c88f]
time/tコマンドで得られる結果の書式は HH:mm で秒は得られな...
分までで十分な場合はこの方法が簡単である。
for /f "delims=: tokens=1,2" %%A in ('time/t') do set HH...
for /f "delims=: tokens=1,2" %%A in ('time/t') do set HH...
/////////////////////////////////////////////////////////...
*日付をdate/tコマンドで得る [#c7196ce1]
date/tコマンドで得られる結果の書式は yyyy/mm/dd で、
Win2Kの場合は空白をはさんで曜日が後ろに付く。
for /f "tokens=1-3 delims=/- " %%A in ('date/t') do set ...
for /f "tokens=1-3 delims=/- " %%A in ('date/t') do set ...
空白もデリミタにする必要があるので、delims=/- と " の間に...
/////////////////////////////////////////////////////////...
*時刻をTIME環境変数から得る [#ja3e2234]
秒まで得たい場合は、time/tコマンドでは得られない。
set HHMMSS=%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
というコードを目にすることがあるが、これには2点問題がある。
+タイミングによって誤った時刻が得られる
+0〜9時台は先頭が0でなく空白となる
1.の理由だが、
:loop
set X=%TIME%/%TIME%
if %X:~0,11% == %X:~-11% goto loop
を実行すると、しばらくしてループから抜ける。
つまり、同一の文でも複数回 %TIME% を記述するとその度に最...
従って、例えば18時頃に前記のスクリプトを実行した場合、
最初の %TIME% 参照時に 17:59:59.99 で、2,3回目に 18:00:00...
得られる HHMMSS は 170000と、実際の時間と1時間ずれること...
set T=%TIME: =0%
set HHMMSS=%T:~0,2%%T:~3,2%%T:~6,2%
のように、一旦別の環境変数にセットすることで1.の問題を回...
その時、空白 を 0 に置換することで2.の問題も処理できる。
/////////////////////////////////////////////////////////...
*日付をDATE環境変数から得る [#o423736b]
Win2Kでは、yyyy/mm/dd の前に曜日が付くため、Win2KとWinXP...
スクリプトにしたければ、文字位置を後ろから数えて指定する。
前述の時刻と同様、レアケースだが日が変わるタイミングで実...
誤った日付となる可能性があるため、一旦別の環境変数にセッ...
ただし、定時刻起動の処理など明らかに0時直前に実行されるこ...
%DATE%のまま使っても問題ない((他のページの例ではこの様な...
set D=%DATE%
set YYYYMMDD=%D:~-10,4%%D:~-5,2%%D:~-2%
デリミタが / であるという前提を置いて良ければ、
set D=%DATE:/=%
set YYYYMMDD=%D:~-8%
さらに、WinXPに限定してよければ、
set YYYYMMDD=%DATE:/=%
でよい。
/////////////////////////////////////////////////////////...
*日時を得る [#d519e3dd]
日時を同一コマンドや同一環境変数で得ることは出来ないので、
日付と時刻を別々のタイミングで取得する必要がある。~
日が変わるタイミング、例えば 2005/01/31 23:59:59.99 に日...
2005/02/01 00:00:00.00 に時刻を得ると、結果は 2005/01/31 ...
実際とは1日ずれてしまう。従って、日をまたがっていないチェ...
:retry
set D=%DATE%
set T=%TIME: =0%
if not %D% == %DATE% goto retry
set YYYYMMDDHHMMSS=%D:~-10,4%%D:~-5,2%%D:~-2%%T:~0,2%%T:...
date/t や time/t コマンドを使うことも出来るがどうせ一旦別...
セットする必要があるので、環境変数を使うほうが簡単である。
別の方法として、VBSのNow()関数を使って日付・時刻を同時に...
echo WScript.Echo Now() > tmp.vbs
for /f "tokens=1-6 delims=/-: " %%A in ('cscript //nolog...
) do set YYYYMMDDHHMMSS=%%A%%B%%C%%D%%E%%F
del tmp.vbs
/////////////////////////////////////////////////////////...
//*年月日の順序が変更されれている状況で日付を得る [#t0415...
//アメリカ式、ヨーロッパ式のように、年月日の順を変更して...
//年月日を得る方法として、date コマンドの2行目を参照する...
//年月日の順序を変更している場合、date コマンドの2行目の、
//
//>新しい日付を入力してください: (年-月-日)
//
//のカッコの中の文字順序がそれに応じて変わることを利用す...
//
// for /f "tokens=1-3 delims=/- " %%X in do ('date/t') (
// for /f "tokens=2-4 skip=1 delims=/-() " %%A in ('dat...
// set %%A=%%X& set %%B=%%Y& set %%C=%%Z
// ))
// set YYYYDDMM=%年%%月%%日%
//
//set文では、環境変数 %年% %月% %日% にそれぞれ対応する値...
//
/////////////////////////////////////////////////////////...
*年月日の書式が変更されれている状況で日付を得る (WinXP)[#...
コントロールパネルでアメリカ式、ヨーロッパ式のように、
年月日の順を変更している場合、
また曜日表示を指定している場合にでも年月日を得る方法を考...
なお、和暦にも対応するのは可能だろうがレアケースだと思う...
WinXPの場合は、reg コマンドでレジストリの値が取得できるの...
コントロールパネルの地域と言語のオプションで設定した日付...
for /f "skip=4 tokens=2*" %%A in ('reg query "HKCU\Contr...
書式には空白が含まれる可能性があるので、tokens=2* として3...
これで得た FMT を使って、以下のように YYYYMMDD の書式で日...
delims= には書式に含まれる可能性のある固定文字がこれ以外...
set YYYY=&set YY=&set MM=&set M=&set DD=&set D=&set DDD=
for /f "tokens=1-4 delims=/-() " %%A in ("%FMT%") do (
for /f "tokens=1-4 delims=/-() " %%a in ("%DATE%") do (
set %%A=%%a&set %%B=%%b&set %%C=%%c
if not "%%D"=="" set %%D=%%d
))
if not "%YY%"=="" set YYYY=20%YY%
if not "%M%"=="" set MM=0%M%
set MM=%MM:~-2%
if not "%D%"=="" set DD=0%D%
set DD=%DD:~-2%
set YYYYMMDD=%YYYY%%MM%%DD%
/////////////////////////////////////////////////////////...
*年月日の書式が変更されれている状況で日付を得る (Win2000)...
Win2000には reg コマンドは無いが、VBS+WSHを使えばレジスト...
ただし %DATE% や date/t の書式そのままでないので([[機能差...
曜日部分に工夫が必要。
>tmp.vbs echo Set WShell=WScript.CreateObject("WScript....
>>tmp.vbs echo WScript.Echo WShell.RegRead("HKCU\Control...
for /f "delims=" %%A in ('cscript //nologo tmp.vbs') do ...
del tmp.vbs
set FMT=ddd %FMT:ddd=%
以降は WinXP と同じ方法で年月日を取得できる。
/////////////////////////////////////////////////////////...
#navi(機能別)
ページ名: