2012-04-17 8 views
1

私は日付を比較するバッチファイルを持っています。問題は異なるセットアップでテストする必要があることです。異なる言語は異なる日付形式を意味します。バッチを使用してWindowsロケールに基づいて日付をフォーマットするにはどうすればよいですか?

例えばはTest.logファイルの更新日時が(ロケールの日付形式が何であるかを知らない)を取得

for %%i in (c:\Test.log) do (
call :testprocess %%~ti 
) 

私はYYYY/MM/DDのTest.logの変更日付をフォーマットします。

ロケールの日付の形式がわからなくても、どうすれば達成できますか?

+1

[これらの質問](http://www.google.com/cse?cx=018205968162215846785%3A7n6ajnwyz-i&ie=UTF-8&q=batch+wmic+date&sa=Search)、特に[this]をご覧ください。 (http://stackoverflow.com/questions/5594121/batch-script-date-into-variable "バッチスクリプトの日付を変数にする")と[this](http://stackoverflow.com/questions/8937944/batch-process YYYYMMDD形式の日付を持つファイルをあるフォルダから別のフォルダに移動するためのバッチ処理」を参照してください)。 –

+1

@quinekxiなぜあなたはあなたのタイトルで閉鎖しましたか?あなたが答えを見つけたら、答えを投稿して、それからあなた自身がそれを受け入れることができます。 @ gideonねえ。 – gideon

+0

あなたの訂正に感謝します。 :D – quinekxi

答えて

1

私はこれに関する解決策を見つけました。私は私の参照のリンクを失った。だから私はいくつかのコードを微調整し、私のニーズにこれを使用します。

for %%i in (c:\Test.log) do (
    call :testprocess %%~ti 
    ) 

    :testprocess 
    set temptime=%1 

国際キーをレジストリで検索すると、iDateとsDateの値が取得されます。

set KEY_DATE="HKCU\Control Panel\International" 
    FOR /F "usebackq skip=4 tokens=1,3" %%A IN (`REG QUERY %KEY_DATE% /v iDate 2^>nul`) DO set iDate=%%B 
    FOR /F "usebackq skip=4 tokens=1,3" %%A IN (`REG QUERY %KEY_DATE% /v sDate 2^>nul`) DO set sDate=%%B 

IはdelimsとしてsDate値を使用=ロケール日付のどのような形式のものiDateを用います。

FOR /F "tokens=1-3 delims=%sDate%" %%A IN ("%temptime%") DO (
     IF "%iDate%"=="0" (
      SET fdd=%%B 
      SET fmm=%%A 
      SET fyyyy=%%C 
     ) 
     IF "%iDate%"=="1" (
      SET fdd=%%A 
      SET fmm=%%B 
      SET fyyyy=%%C 
     ) 
     IF "%iDate%"=="2" (
      SET fdd=%%C 
      SET fmm=%%B 
      SET fyyyy=%%A 
     ) 
    ) 

    echo %fyyyy%/%fMM%/%fdd% 

ffを参照することもできます。 hereでの使用。

あなたにこのヘルプをお願いします。

関連する問題