1

シンプルだと思いますが、うまくいきません!たぶん誰かが助けることができます...

「07503.csv」ファイルが存在するかどうかを確認し、「07504.csv」、「07505.csv」...「07552.csv」までチェックするプログラムが必要です。ここでプログラムを終了するとします (私の問題を理解できるように簡略化されています)。

これは機能します:

SET angle=075
SET velocity=03
SET finalfilename=.csv

SET endofsequency=07552

SETLOCAL EnableDelayedExpansion 

:loop

    SET currentsequency=%angle%%velocity%
    SET fullfilename=%currentsequency%%finalfilename%

    :CHECK_FILES
    IF EXIST %fullfilename% (
        ECHO FILE FOUND: %fullfilename% 
        GOTO :GO_TROUGHT 
    ) ELSE (
        ECHO FILE NOT FOUND: %fullfilename% 
        GOTO :WRITE_LOG 
    )

    :WRITE_LOG
    ECHO %time% missing: %fullfilename% 
    ECHO %time% missing: %fullfilename% >> FilesMissed.txt

    :GO_TROUGHT
    FOR /F "tokens=* delims=0" %%A IN ("%velocity%") DO SET velocity=%%A
    SET /A velocity+=1
    SET velocity=000%velocity%
    SET velocity=%velocity:~-2%

    PAUSE

IF %currentsequency% NEQ %endofsequency% GOTO loop

:END

PAUSE

しかし、IF-ElSE ステートメントでは次のことはできません。

SET angle=075
SET velocity=03
SET finalfilename=.csv

SETLOCAL EnableDelayedExpansion 

:loop

    SET currentsequency=%angle%%velocity%
    SET fullfilename=%currentsequency%%finalfilename%

    :CHECK_FILES
    IF EXIST %fullfilename% (
        ECHO FILE FOUND: %fullfilename% 
        GOTO :GO_TROUGHT 
    ) ELSE (
        ECHO FILE NOT FOUND: %fullfilename% 
        GOTO :WRITE_LOG 
    )

    :WRITE_LOG
    ECHO %time% missing: %fullfilename% 
    ECHO %time% missing: %fullfilename% >> FilesMissed.txt

    :GO_TROUGHT
    IF "%velocity%" NEQ "52" (
        FOR /F "tokens=* delims=0" %%A IN ("%velocity%") DO SET velocity=%%A
        SET /A velocity+=1
        SET velocity=000%velocity%
        SET velocity=%velocity:~-2%
    ) ELSE (
        GOTO :END
    )

    PAUSE

GOTO :loop

:END

PAUSE

私の質問はなぜですか?何が起こっていますか?IF-ELSE 内で FOR を使用できませんか? なるほど...

よろしく、

4

3 に答える 3

1

これは私がそれを行う方法です:

@ECHO OFF
SETLOCAL EnableDelayedExpansion 

SET angle=075
SET "velocity=103"               // Will use just 2 last digits of velocity
SET finalfilename=.csv

SET "endVelocity=152"            // The same here...

SET /A numberOfValues=endVelocity - velocity + 1

for /L %%i in (1,1,%numberOfValues%) do (

    SET fullfilename=%angle%!velocity:~-2!%finalfilename%

    rem CHECK_FILES
    IF EXIST !fullfilename! (
        ECHO FILE FOUND: !fullfilename! 
    ) ELSE (
        ECHO FILE NOT FOUND: !fullfilename! 
        rem WRITE_LOG
        ECHO !time! missing: !fullfilename! 
        ECHO !time! missing: !fullfilename! >> FilesMissed.txt
    )

    SET /A velocity+=1

    PAUSE
)

PAUSE
于 2013-06-08T04:12:47.840 に答える
1

よく読まずに - 代わりにこのヘルプを使用しますか?

IF "%velocity%" EQU "52" goto :END

もう少し詳しく見てみましょう - これは拡張の遅延の問題です。有効にしてから !variable! を使用する必要があります。括弧内の場合は %variable% の代わりに。

編集:遅延展開でこれを試してください。最初の行が変更され、最後の 2SET velocity=行が変更されます。

setlocal enabledelayedexpansion
SET angle=075
SET velocity=03
SET finalfilename=.csv

SETLOCAL EnableDelayedExpansion 

:loop

    SET currentsequency=%angle%%velocity%
    SET fullfilename=%currentsequency%%finalfilename%

    :CHECK_FILES
    IF EXIST %fullfilename% (
        ECHO FILE FOUND: %fullfilename% 
        GOTO :GO_TROUGHT 
    ) ELSE (
        ECHO FILE NOT FOUND: %fullfilename% 
        GOTO :WRITE_LOG 
    )

    :WRITE_LOG
    ECHO %time% missing: %fullfilename% 
    ECHO %time% missing: %fullfilename% >> FilesMissed.txt

    :GO_TROUGHT
    IF "%velocity%" NEQ "52" (
        FOR /F "tokens=* delims=0" %%A IN ("%velocity%") DO SET velocity=%%A
        SET /A velocity+=1
        SET velocity=000!velocity!
        SET velocity=!velocity:~-2!
    ) ELSE (
        GOTO :END
    )

    PAUSE

GOTO :loop

:END

PAUSE
于 2013-06-07T15:45:02.860 に答える