2022年5月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ

« コマンドラインでPDFファイルを印刷する。(AdobeReader7.0/8.0) | トップページ | バッチファイルで行末の空白を削除する。 »

2007年1月 5日 (金)

DATE/TIMEコマンドやDATE/TIME環境変数の形式は地域に依存します。

「地域と言語のオプション」の影響を受けないようにするには、DATE/TIMEコマンドやDATE/TIME環境変数を使わず、WSHスクリプトを使うのが一番です。

@if(0)==(0) ECHO OFF
FOR /F %%0 IN ('CScript.exe //NoLogo //E:JScript "%~f0"') DO SET yyyymmddhhmmss=%%0
ECHO %yyyymmddhhmmss%
GOTO :EOF
@end
var d=new Date();
WScript.Echo(d.getFullYear()*10000000000+(d.getMonth()+1)*100000000+d.getDate()*1000000+d.getHours()*10000+d.getMinutes()*100+d.getSeconds());

二番目は、CALLやFORの引数で、ファイルのタイムスタンプ「%~t0」を使えば、「地域と言語のオプション」の影響を受けずに済みます。ただし、秒が取れません。しかし、実際に秒の精度が必要なことはまずないので、形式的に必要なら00で埋めて代用すればよいのです。
※XPだけ?Vistaでは駄目。

TYPE NUL>$$$
FOR %%0 IN ($$$) DO FOR /F "tokens=1-5 delims=/: " %%1 IN ("%%~t0") DO SET yyyymmddhhmm=%%1%%2%%3%%4%%5
DEL $$$
ECHO %yyyymmddhhmm%

3番目は、固定位置で取り出すのではなく、FORで区切り文字で切り出せば、多少は影響を軽減できます。

SET d=%DATE%
SET t=%TIME%
IF NOT %d%==%DATE% (
SET d=%DATE%
SET t=%TIME%
)
FOR %%0 IN (%d%) DO FOR /F "tokens=1-3 delims=/-年月日" %%1 IN ("%%0") DO IF NOT "%%3"=="" (
SET yyyy=1%%1
SET /A mmdd=10%%200+1000%%3
)
IF %yyyy% LSS 130 (SET yyyy=20%yyyy:~-2%) ELSE IF %yyyy% LSS 200 (SET yyyy=19%yyyy:~-2%) ELSE SET yyyy=%yyyy:~-4%
SET mmdd=%mmdd:~-4%
SET PM=0
FOR %%0 IN (%t%) DO FOR /F "tokens=1-4 delims=:.時分秒" %%1 IN ("%%0") DO (
IF NOT "%%3"=="" (
SET /A hhmmss=10%%10000+1000%%200+100000%%3
) ELSE IF NOT "%%2"=="" (
SET /A hhmmss=10%%1*10000+1000%%200
) ELSE IF "%%1"=="PM" (SET PM=120000) ELSE IF "%%1"=="午後" (SET PM=120000)
)
SET /A hhmmss+=PM
SET hhmmss=%hhmmss:~-6%
ECHO %yyyy%%mmdd%%hhmmss%

曜日が左右いずれに有っても、年号が2桁でも、年月日の区切りが/でも-でも年月日でも、月日時分秒がゼロサプレスでも、秒がなくても、時分秒の区切りが時分秒でも、OKです。

« コマンドラインでPDFファイルを印刷する。(AdobeReader7.0/8.0) | トップページ | バッチファイルで行末の空白を削除する。 »