(1) バッチ処理のパイプ「| の使い方が誤っています。」エラーの原因と対処について
(1-1) エラー概要
(1-2) エラー原因
(1-3) エラー対処
(1) バッチ処理のパイプ「| の使い方が誤っています。」エラーの原因と対処について
(1-1) エラーの概要
バッチファイルを実行した際に下記のエラーが発生しました。
| の使い方が誤っています。
パイプ「|」はforループのin句の中で「in (‘dir /b *.bat | find “Test”‘)」のようにコマンドを連結するために利用していました。
(エラーが起きたプログラム)
@echo off SETLOCAL ENABLEDELAYEDEXPANSION for /f "delims=" %%b in ('dir /b *.bat | find "Test"') do ( echo %%b ) ENDLOCAL
(図111)バッチを実行すると「| の使い方が誤っています。」と表示される
(1-2) エラー原因
rem ###修正前 for /f "delims=" %%b in ('dir /b *.bat | find "Test"') rem ###修正後 for /f "delims=" %%b in ('dir /b *.bat ^| find "Test"')
(1-3) エラー対処
「原因」に記載の通りパイプ「|」をキャレット「^」でエスケープします。
(修正版プログラム)
@echo off SETLOCAL ENABLEDELAYEDEXPANSION for /f "delims=" %%b in ('dir /b *.bat ^| find "Test"') do ( echo %%b ) ENDLOCAL
(実行結果)
(プログラム補足)
@echo off | エコー機能をOFFにし、実行したコマンドの内容をechoさせないようにします。 コマンドの実行結果のみを表示したい場合などに付けます。 |
SETLOCAL ENABLEDELAYEDEXPANSION rem ### 中略 ### ENDLOCAL |
遅延環境変数をセットしています。これをセットする事で、for文の処理を待たせて(遅延させて)、echoの処理が完了したら次のforの処理に移るように制御をします。これが無いとechoする前に次のforループに入ってしまい、変数が空になった状態でechoしてしまうため何も表示されない事象が起きてしまう。 |
for /f “delims=” %%b in (‘dir /b *.bat ^| find “Test”‘) do ( | ■ for /F %変数 in (‘[コマンド]’) do (~) forに「/F」オプションを付与する事で、in句内で指定したコマンドの実行結果を変数(%変数)に格納しています。 ■dir /b *.bat ^| find “Test” |