目次
その他の関連しそうな記事
通常はユーザー入力だがそれを自動で入力する
例えば、「del」コマンドなどでフォルダ内のすべてのファイルを削除しようとしたとき、「よろしいですか (Y/N)? 」といった確認メッセージが表示されます(下図)。
ここで、コピーを行いたい場合は「Y」を入力します。
「del」コマンドであれば「/q」オプションを付けることで確認メッセージを表示しないようにすることができますが、他の方法もあります。
それは、パイプ「|」という機能を使ってユーザー入力(キーボード入力)を自動で行う方法です。
キーを自動で入力するには、
1 |
echo [入力したいキー] | [コマンド] |
とします。これで、[入力したいキー]をパイプ「|」の右側に書いたコマンドに引き渡すことができます。
「del」コマンドを例にとると、「Y」キーを自動で入力させるには、
1 |
echo Y | del folder\* |
となります。
これで、上書き確認メッセージが出ても「Y」キーが自動で入力されるため自分でキーを入力する必要はありません。
以下、実行例です。
「パイプ」は右側にあるコマンドが入力を要求した時点で左側のコマンド実行結果を取り込む機能を持ちます。詳しくは、「パイプについて -コラム-」を参照して下さい。
上記の例では、オプションを付けさえすれば、わざわざパイプを使用する必要はありません。しかし、時にはこのパイプでしか解決できないような問題が生じますので、決して無駄な機能ではありません。
パイプは他のバッチファイルを呼び出すときにも使えます。バッチファイル「no-pipe.bat」で別のバッチファイル「sub.bat」を呼び出している場合を考えましょう。まずは、パイプを使わずに通常通り「call」コマンドだけでバッチファイルを呼び出します。「no-pipe.bat」の内容は以下の通りです。
1 2 3 |
@echo off call sub.bat |
呼び出されるバッチファイル「sub.bat」では、以下のように「del」コマンドでフォルダ内の全てのファイルを削除しようとするバッチファイルとします。
1 2 3 |
@echo off del .\folder\*.* |
実際にバッチファイル「no-pipe.bat」を実行してみましょう。実行は単に、コマンドプロンプト上で、
1 |
no-pipe.bat |
と入力します。
以下、実行結果です。
呼び出したバッチファイル「sub.bat」で全てのファイルを削除しようとしたため確認メッセージがでました。
では、次はバッチファイル「sub.bat」を呼び出すときにパイプで「Y」を引き渡します。
「no-pipe.bat」を次のように書き換えます。バッチファイル名は「pipe.bat」と変更します。
1 2 3 |
@echo off echo Y | call sub.bat |
これを実行すると、
今度は自動で「Y」が入力されました。。
では、呼び出すバッチファイルの中で2度の入力を求められた場合はどうでしょう。「sub.bat」の内容を以下のように変更した場合です。
1 2 3 4 |
@echo off del .\folder\*.* del .\folder2\*.* |
以下は、「pipe.bat」を実行した結果です。
一度目の確認メッセージには「Y」が自動入力されていますが、二度目には何も入力されずにバッチファイルが終了しています。
「folder」フォルダの中は全てのファイルが削除されていましたが、「folder2」フォルダはファイルは削除されていませんでした。
このように、パイプではバッチファイルに入力を自動化させるときは一度だけ有効ですので注意して下さい。