%ERRORLEVEL% は解析時に展開され、括弧で囲まれたコードの FOR ブロック全体が 1 回のパスで解析されるため、コードが機能していません。反復ごとに ERRORLEVEL の値が必要ですが、コードはループが実行される前に存在していた ERRORLEVEL の値を取得しています。
1 つの解決策は、 を使用して上部で遅延展開を有効にすることsetlocal enableDelayedExpansion
です。次に、ループ内で の!ERRORLEVEL!
代わりに使用します%ERRORLEVEL%
。遅延拡張により、各反復の実行時に ERRORLEVEL の目的の値が得られます。
コマンド ラインからhelp set
orを入力して、遅延展開に関する詳細情報を取得します。set /?
しかし、変数の展開をまとめて回避する、より簡単な解決策があります。command1 && command2
command1 が成功した場合にのみ command2 を実行します。||
前のコマンドが成功しなかった場合にコマンドを実行するために使用する演算子もあります。
しかし、FINDSTR式では正しい結果が得られないため、演習全体は無意味であり、最終的な出力は依然として間違っています。
Ansgar Wiechers は、彼の回答で機能する検索パターンを特定しました。「tokens=1」はデフォルト設定なので不要です。
最終的なスクリプトは、次のように単純にすることができます。
@echo off
md helpgen 2>nul
cd helpgen
for /f %%i in ('help ^| findstr /rc:"^[A-Z][A-Z]* "') do help %%i>%%i.txt