2017-02-13 4 views
0

これは、この記事からの続きです:文字列リテラルと時間を比較すると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を処理するのはなぜですか?/

+0

FORコマンド変数を使用している場合、このコードはコードブロック内にあります。したがって、currentTime変数がこのコードブロック内で設定されている場合は、Delayed Expansionで参照する必要があります。既存の問題に影響を与えているコードをすべて表示しているわけではありません。 – Squashman

+0

私は以前の声明にまだ立っていますが、あなたの数字に先行するゼロが付いた問題にぶつかります。たとえば、これを取る: 'IF 1 GTR 08 echo yes'。これは実際にyesを出力します。 – Squashman

+0

@Squashman、こんにちは、私は自分の投稿を編集しました。あなたの最近のコメントについては、この 'SET currentTime =%Time:= 0%'は先行ゼロの問題を軽減すると思います...そうですか? – newbie

答えて

0

みんな!あなたの洞察力のために再び ありがとう。私は、バッチスクリプトで多くのことを学びました。

を私は問題の根本的な原因を発見した。私はFORループ内で呼び出す必要があり、アプリケーションの.dllファイルしたがって、アプリケーションを実行しているときに、dllファイルまたはそのアプリケーションを実行するために必要なすべてのファイルが最新であることを確認してください。

また、STARTの代わりにCALLを使用して.exeファイルを呼び出しました。 STARTを使用した場合と比べてプログラムがスムーズに実行されます

もう一度おねがいします!

+0

'start'も' call'も必要ありません。 '.exe'ファイルを実行する... – aschipfl

関連する問題