2017-01-24 2 views
0

PC時間を取得し、テキストファイルが空であるかどうかを確認するバッチスクリプトがあります。それは私は手動で時間を入力しますHR:MIN; delimsを使用して、HRMINの個々の変数を取得し、HR:MIN(テスト目的のみ)に戻しますが、スクリプトは変数値なしでただ:を返しています。私はそれが私が行方不明である何かばかだと確信していますが、私にあなたの洞察力を与えてください!ここでIF Statementでバッチスクリプトが解析されない

は、コードのセクションです:

for %%a in ("C:\My Scripts\Temp Files\%DAY%.txt") do set size=%%~za 
if %size% EQU 0 (
    set /p Timeout=Time-Out: 
    echo %Timeout%>nul 
    for /f "tokens=1 delims=:" %%i in ('echo %Timeout%') do set ToutHR=%%i 
    for /f "tokens=2 delims=:" %%i in ('echo %Timeout%') do set ToutMIN2=%%i 
    pause 
    echo Time-Out: %ToutHR%:%ToutMIN2% 
    pause 
) 

し、それを返します:

C:\My Scripts>test.bat 
Time-Now: 9:29 
Time-Out: 4:45 
Press any key to continue . . . 
Time-Out: ECHO is on.: 
Press any key to continue . . . 
1 was unexpected at this time. 
+3

あなたは必要[遅延拡張](http://ss64.com/nt/delayedexpansion.html) – npocmaka

+0

ええ、私のコードのヘッダーがある:@エコーオフ setlocal EnableDelayedExpansion setlocal enableextensions – Russ

+2

また、 '!Timeout!'、 'ToutHR' ... – npocmaka

答えて

0

あなたはヘッダにそれを持っているとして、あなたのコードがそれに応じて変更します。

For %%a In ("C:\My Scripts\Temp Files\%DAY%.txt") Do Set "size=%%~za" 

If "%size%"=="0" (Set/P "Timeout=Time-Out: " 
    For /F "Tokens=1-2 Delims=:" %%i In ("!Timeout!") Do (Set "ToutHR=%%i" 
     Set "ToutMIN2=%%j") 
    Echo=Time-Out: !ToutHR!:!ToutMIN2! 
    Pause 
) 
+0

それはDefです。それを行う別の(クリーナー)方法:Dしかし、私は(@ npocmakaのおかげで)if文の中にあったので、ブロック全体が完了し、使用する必要がある前に解析する必要があることを認識しました。すべての "%"対対 – Russ