DOSのFORコマンドは、数あるDOSのコマンド中でも 肝となる重要なコマンドです。
そのFORコマンド内で実行するコマンドに パイプやリダイレクトを使用したい場合があります。
例えば・・・
C:\>FOR /F %i IN ('DIR /B /A:-D | FIND /C /V ""') DO ECHO %i
| の使い方が誤っています。
上の例では、カレントディレクトリのファイルの数を出力しようとしているのですが 「| の使い方が誤っています。」とエラーが表示されてしまいます。
これは、FORコマンド内のパイプやリダイレクトは "^"(キャレット)を使ってエスケープしてやる必要があるためです。
正しくは、下のようになります。
C:\>FOR /F %i IN ('DIR /B /A:-D ^| FIND /C /V ""') DO ECHO %i
3
リダイレクトも同様です。
FOR /F "tokens=1,2 delims==" %i IN ('ASSOC') DO ( IF NOT "%j" == "" ( FOR /F "tokens=2 delims==" %k IN ('FTYPE %j 2^>nul') DO ( ECHO %i ECHO -^> %k ECHO. ) ) )
上の例は、ファイルの関連付けを出力しているのですが、 3行目の標準エラーを捨てる「2^>nul」の「>」も エスケープしています。