これは、この記事からの続きです:文字列リテラルと時間を比較するとComparing string literals and timeバッチスクリプト:IF-ブロック文内startコマンドを呼び出す
は、今、私の前の質問に貢献した人あなたのすべてのおかげで正しいです。
しかし、永続的な問題は、ifブロックステートメント内で "start"コマンドを呼び出すことにあります。
のは、このコードを見てみましょう
、setlocal EnableDelayedExpansion
For /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set MyDate=%%x
SET triggerFolderPath=D:\InputFiles
SET month=%MyDate:~4,2%
SET day=%MyDate:~6,2%
SET year=%MyDate:~0,4%
SET dateToday=%year%%month%%day%
SET currentTime=%Time: =0%
.
.
.
for %%F in (%triggerFolderPath%\*.*) do (
echo %%~nxF
IF "%%~nxF"=="file_one.txt" (
IF %currentTime:~0,2% GEQ 18 (IF %currentTime:~0,2% LEQ 23 (echo success
echo process_one
start /b "" "C:\Program Files\Process.exe" -process ProcessOne))
)
IF "%%~nxF"=="file_two.txt" (
IF %currentTime:~0,2% GEQ 08 (IF %currentTime:~0,2% LEQ 23 (echo success
echo process_two
start /b "" "C:\Program Files\Process.exe" -process ProcessTwo))
.
.
.
)
endlocal
exit /b 0
EXIT /B %ERRORLEVEL%
考える:〜NXF = file_two %%; echoコマンドを追加して、条件がヒットしたかどうかを確認しました。条件
IF "%%~nxF"=="file_two" (
IF %currentTime:~0,2% GEQ 08 (IF %currentTime:~0,2% LEQ 23 (echo success
echo process_two
start /b "" "C:\Program Files\Process.exe" -process ProcessTwo))
)
場合、エラーは、それが代わりProcessTwoのProcessOneを実行し続けているが
プログラムは、このためにエコー出力することができました。 ProcessOwを処理する後者のif-blockステートメントに含まれていない場合、ProcessOneを処理するのはなぜですか?/
FORコマンド変数を使用している場合、このコードはコードブロック内にあります。したがって、currentTime変数がこのコードブロック内で設定されている場合は、Delayed Expansionで参照する必要があります。既存の問題に影響を与えているコードをすべて表示しているわけではありません。 – Squashman
私は以前の声明にまだ立っていますが、あなたの数字に先行するゼロが付いた問題にぶつかります。たとえば、これを取る: 'IF 1 GTR 08 echo yes'。これは実際にyesを出力します。 – Squashman
@Squashman、こんにちは、私は自分の投稿を編集しました。あなたの最近のコメントについては、この 'SET currentTime =%Time:= 0%'は先行ゼロの問題を軽減すると思います...そうですか? – newbie