2

私のスクリプトは、フォームの「settings.txt」ファイルから情報を呼び出します

property1=value11,value12,...,value1n
property2=value21,value22,...,value2n
.
.
.
propertym=valuem1,valuem2,...,valuemn

「n」個のスキーマをデータベースに追加するには、次の形式のファイル「setup.txt」を使用します。

2
3
.
.
.
n+1

追加するスキーマを指定します。各スキーマをループする「for」ループは

FOR /F %%T IN (setup.txt) DO ( 
    SET position=%%T        
    FOR /F "tokens=1,!position!, delims==," %%A IN (settings.txt) DO (
        IF "%%A"=="property1" (
            SET %%A="%%B"
        )
[The code then continues to go through capturing the rest of the variables, and
then executes the relevant SQL commands]

これから得られるエラーメッセージは

(この時は予想外でした。

このスクリプトは以前は (2 つの for ループを追加する前は) 一度に 1 つのスキーマのみで動作していたため、問題は for ループの設定方法にあるか、または for ループと前のコードとの競合のいずれかです。以前の作業スクリプトに追加したのは、2 つの FOR ステートメントと SET ステートメントだけです。

数人に見てもらいましたが、誰も問題を見つけることができませんでした。ここに何かアイデアはありますか?

ありがとう

4

1 に答える 1

2

問題はライン

FOR /F "tokens=1,!position!, ...

FOR コマンドには独自のパーサーがあり、この方法ではオプションを展開できないため、FOR/f オプションで遅延展開を使用することはできません。

ただし、関数に移動してパーセント展開を使用できます

FOR /F %%T IN (setup.txt) DO ( 
    call :myFunc %%T
)
:exit /b

:myFunc
FOR /F "tokens=1,%1, delims==," %%A IN (settings.txt) DO (
    IF "%%A"=="property1" (
        SET %%A="%%B"
    )
)
exit /b
于 2012-07-27T11:52:32.683 に答える