2011-12-21 9 views
0

私は特定の日付で何かをする単純なバッチスクリプトを持っていますが、これは日付の間、またはいつも特定の日付の前後にこれを実行できるようにしたいと思います。バッチコード:日付以上かそれ未満か?

@ECHO OFF 

IF "%DATE%"=="12/12/2011" GOTO ARMREST 
GOTO END 

:ARMREST 
ECHO HELLO WORLD! 
PAUSE 

:END 

は今、私は「=>」を使用してみましたが、それは動作しませんでした、私はすべての上にしてきたが、私が探しているものを見つけるように見えることはできません。私はその種の複雑なブール値を使うことができるのかどうか分からない。これは、Windows 7、非常に簡単なスクリプトのためだけに日付について疑問に思っています。

また、私はスペイン語の機械を持っていますが、その日付の値はイギリスとは異なります - 英国は "12/02/2011"(DD/MM/YYYY)です。スペイン語は12/2011年(dd/m/yyyy)私は思うが、私は単純な@ECHO%DATE%でそれを見つけることができないだろうか?

ありがとうございます!

答えて

0

yyyymmddの形式ですべての日付を正規化して比較する必要があります。例えば:

rem Convert from dd/m/yyyy to yyyymmdd 
set date=%date:/=/0% 
set year=%date:~-4,4% 
set month=%date:~-8,2% 
set day=%date:~0,2% 
set normdate=%year%%month%%day% 

変数部分文字列のインスタンスhttp://ss64.com/nt/syntax.htmlをチェックし、交換してください。

比較はlss、leq、gtr、およびgeqで行われます。

+0

これは異なる日付形式のOP問題を解決しません。 –

+0

私は同意します。私は "走らなければならない機械の一つがスペイン語です"と読みました。 –

1

%DATE%は、完全に(無限に)カスタマイズ可能な短い日付形式を使用して現在の日付を返します。 1人のユーザがFri040811を返すようにシステムを設定し、別のユーザが08/04/2011を選ぶかもしれません... BATプログラマのための完全な悪夢です。

可能な解決策は、WMICを使用することです。 WMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:tableは、FORで直接解析できる便利な方法で日付を返します。

@ECHO OFF 
FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
    SET /A DAYS=%%F*10000+%%D*100+%%A 
) 
IF %DAYS% GTR 20111210 (
    IF %DAYS% LSS 20111230 (
    ECHO Yes! 
) 
) 
GOTO :eof 
関連する問題