自動化されたジョブから定期的にトリガーされるバッチファイルを作成しました。
バッチファイル内で、時刻が午前12時から午前8時の間であるかどうかを確認し、特定の値で変数を設定します。そうでない場合は、デフォルトに設定します。
バッチファイルでこれを行うためのヒントはありますか?
自動化されたジョブから定期的にトリガーされるバッチファイルを作成しました。
バッチファイル内で、時刻が午前12時から午前8時の間であるかどうかを確認し、特定の値で変数を設定します。そうでない場合は、デフォルトに設定します。
バッチファイルでこれを行うためのヒントはありますか?
for /f "delims=:." %%T in ("%time%") do if %%T lss 08 (set var=someValue) else (set var=default)
編集-zb226は正しいです-上記は必要以上に複雑です。行うのがはるかに簡単
if %time:~0,2% lss 08 (set var=someValue) else (set var=default)
08の先行0は重要です。その理由は、0が前に付いた数値は8進表記として扱われ、8と9は有効な8進数字ではないためです。IFステートメントは、いずれかの側に無効な8進数が検出された場合、文字列比較を実行します。したがって、現在の時間が09の場合、09 lss 8
0は8の前にソートされるため、TRUEになります。に変更すると09 lss 08
正しい答えが得られます。
上記のいずれのソリューションでも、正確に8:00:00.00 AMの場合、値はデフォルトに設定されます。午前8:00:00.00までの「特定の値」が本当に必要で、それ以降はデフォルトにする場合は、もう少し複雑です。その場合、FORソリューションに戻ります。
for /f "tokens=1-4 delims=:." %%A in ("%time%") do (
set var=default
if %%A lss 08 set var=someValue
if %%A%%B%%C%%D equ 08000000 set var=someValue
)
これはすでに答えられているようですが、解決策は私には不必要に複雑に思えます。また、解決策を理解するために、いくつかの追加の説明が役立つ場合があります。
次を使用して、バッチファイルの現在の時刻にアクセスできます%TIME%
。
C:\>echo %TIME%
18:01:52,64
%TIME%
次の構文を使用して、 (またはその他の変数)のサブストリングにアクセスできます。
C:\>echo %TIME:~0,2%
18
したがって、説明したように変数を条件付きで設定するには、次のようにします。
IF %TIME:~0,2% LSS 08 ( SET VAR=particularValue ) ELSE ( SET VAR=defaultValue )
編集: @dbenhamの助けを借りて解決策を修正しました-彼の答えとコメントを見て、私の最初の試みの何が悪かったのかを確認してください。