3

自動化されたジョブから定期的にトリガーされるバッチファイルを作成しました。

バッチファイル内で、時刻が午前12時から午前8時の間であるかどうかを確認し、特定の値で変数を設定します。そうでない場合は、デフォルトに設定します。

バッチファイルでこれを行うためのヒントはありますか?

4

2 に答える 2

5
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 80は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
)
于 2012-07-31T16:01:57.180 に答える
5

これはすでに答えられているようですが、解決策は私には不必要に複雑に思えます。また、解決策を理解するために、いくつかの追加の説明が役立つ場合があります。

次を使用して、バッチファイルの現在の時刻にアクセスできます%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の助けを借りて解決策を修正しました-彼の答えとコメントを見て、私の最初の試みの何が悪かったのかを確認してください。

于 2012-07-31T16:14:32.203 に答える