1

ユーザープロンプトの名前を含むフォルダーをフォルダー内で検索するための簡単なバッチを作成しようとしています。フォルダーが見つかった場合、フォルダーを事前定義された場所にコピーするかどうかを尋ねられます。cmdで行を個別に入力すると正常に動作しますが、バッチファイルに保存して実行しようとすると、SETの直後にfor doのどこかで閉じてしまうので、何かがあるのではないかと疑っています私のFORがNotepad ++でどのようにフォーマットされているか?

:START
    set /p nw=Please enter the search string: 

    FOR /f "tokens=*" %%i IN ('dir /a:d-s-h /b ^| findstr /i /m "%nw%"') do (
        echo found %%i &&echo.
        set /p cflag=Would you like to copy this folder over? Press 'y' and enter: 
        if %cflag%==y xcopy "%%i" "%sci%" /e
    )

set /p rflag=Search for another folder? Press 'y' and enter: 
if %rflag%==y goto START

これはXPで実行する予定です。

ありがとう。

4

1 に答える 1

1

notepad++とは関係なく、キーワードは遅延展開です。

%cflag% は、 for ブロックが解析されている間、ブロック内の行が実行される前に展開されます。
したがって、それはまだ空であり、何も展開されません。
そして、if 句の構文が無効です。

しかし、遅延展開で解決できます。
これをバッチの先頭に置くだけです。

Setlocal EnableDelayedExpansion

そして、変数を展開します

!cflag!
于 2012-10-25T20:27:48.493 に答える