|
戻る |
■■■文字に色をつける■■■ @echo \[32mここに文字をいれる\[0m |
■■■変数を使用する■■■ 環境変数に値をセットする。 SETコマンドの使用。 環境変数の値を参照する。 %変数名% (変数名の前後に「%」を記載する) 「%」で包み込まれた環境変数部分が内容に置き換えられて(展開)、置きかえれた結果が利用されます。 例 環境変数に値を代入し、表示させる。 SET HENSU="変数" echo HENSU= %HENSU% 実行結果 C:\>SET HENSU="変数" C:\>echo HENSU= %HENSU% HENSU= "変数" 例 用意されている環境変数を使う。 echo このパソコンのユーザーは username です。 echo このパソコンのユーザーは %username% です。 実行結果 C:\>echo このパソコンのユーザーは username です。 このパソコンのユーザーは username です。 C:\>echo このパソコンのユーザーは %username% です。 このパソコンのユーザーは PC-User です。 |
■■■スペースを含む文字列を扱う■■■ ファイル名やディレクトリ名などを扱う文字列に、スペース(空白)を含むことも出来ます。 たとえば、「Program Files」というディレクトリ名などを扱えます。 ただし、こうしたスペースを含む名前を使った場合、コマンドはスペースを 「オプション指定の区切り」 として解釈するので、「Program」と「Files」の2つの文字列として扱われてしまいます。 これを避けるために、スペースを含む文字列を扱う場合は、「"Program Files"」というように、 ひと続きの部分を半角の「"」で挟んでください。これで、途中のスペースを文字列の一部と 解釈されるようになります。 例 cd C:\Program Files NG cd "C:\Program Files" OK |
■■■リダイレクト機能を使う■■■ この機能を使うと、画面の出力先から、ファイルに出力先と変わります。 この方法で、結果をテキストファイルとして残すことができます。 > …出力先へ書き出す(前の情報がある場合上書きされる) >> …出力先へ追加書き出しする(前の情報に追加される) < …入力先からデータを受け取る 例 dir > test.txt ファイル一覧をtest.txtに出力する。 |
■■■パイプ機能を使う■■■ 「元コマンド|先コマンド」というように2つのコマンドを「|」で区切って並べ、 「元コマンド」の結果を「先コマンド」に送って処理させる機能です。 最終的には、「先コマンド」で処理した結果が表示また出力されます。 またこれはフィルタコマンドしか使えません。 例 DIR | SORT ファイル一覧を並び替えて表示する。 「パイプ」と「リダイレクト」を組み合わせることもできます。 例 DIR | SORT > test.txt ファイル一覧を並び替えてtest.txtに出力する。 |
■■■パラメータを用いる■■■ バッチファイルに何かのデータを渡して処理させたい場合、起動時にパラメータを指定します。 例 test.bat data1 「test.bat」というバッチファイルに足して、起動時に「data1」という文字列を引き渡しています。 受け取った文字列を利用するためには、 %1 1つ目のパラメータ(引数)が入る変数 %2 2つ目のパラメータ(引数)が入る変数 : : %9 9つ目のパラメータ(引数)が入る変数 通常、最大9つまでのパラメータ(引数)を利用できます。 たとえば 「dir %1 %2」という test.bat 用意し、 「test.bat c:\ test.txt」と、2つのパラメータ(引数)を付けてtest.batを利用すると、 c:\内のファイル一覧がtest.txtに出力されます。 |
■■■エラーレベルを使う■■■ エラーレベル(ERRORLEVEL)とは、直前の実行コマンドも戻り値が格納されています。 一般的には、正常終了の場合 "0"、異常終了の場合"1"以上であるようです。 ただし、直前の実行コマンドが何らかのプログラムであれば、実行プログラムの仕様に左右されます。 つまりは、エラーレベルを用いることで、エラーを検知する。または戻り値を取得・利用することができます。 例 type c:\abcdefg.txt if NOT "%ERRORLEVEL%"=="0" echo "エラーです。" echo "おわり" 結果(c:\abcdefg.txtが存在する場合) "おわり" 結果(c:\abcdefg.txtが存在しない場合) "エラーです。" "おわり" |
■■■遅延変数を使用する■■■ その前に、下記のコマンド郡を実行すると、 SET j=10 FOR %i IN (1,2,3) DO ( SET j=%%i ECHO %i "%j%" ) 実行結果 1 "10" 2 "10" 3 "10" となり、DO処理内での環境変数jにSET文で代入した値が使われていません。 FORに出会った時点でセットされた阿多が使われています。 なぜなら、FOR文が出てきた時点で、FOR文の最後のカッコを閉じるところまでが一括評価され、 その範囲にある環境変数の値がまとめてセットされます。その後、DOの処理を行うようになります。 これでは、思う処理ができない場合があります。 これを避けるのが、「遅延環境変数展開」という機能です。 これを指定しておくと、行(命令)単位での変数の一括評価を行わず、変数が出てきた都度、 その場で変数の値をセットするようになります。 SET文の遅延環境変数展開を使うためには、右辺の全体を「%」ではなく「!」で挟みます。 そして、この機能はコマンド拡張機能がONになっていないと使えないため、バッチファイルの先頭で、 SETLOCAL ENABLEDELAYEDECPANDION と指定し、コマンド拡張機能を有効にします。 バッチ スクリプトを使って、拡張機能が利用可能かどうかを判断することができます。 それには、次のように入力します: VERIFY OTHER 2>nul SETLOCAL ENABLEEXTENSIONS IF ERRORLEVEL 1 echo 拡張機能を有効にできません SET j=10 FOR %i IN (1,2,3) DO ( SET j=!%%i! ECHO %i "%j%" ) 実行結果 1 "1" 2 "2" 3 "3" |
■■■コマンドを画面に表示しないで実行する■■■ たとえばECHO OFFコマンドを使うとコマンドを画面に表示せずに実行できますが、 ECHO OFFというコマンド自体は表示されてしまいます。そこで、「@ECHO OFF」とすれば、 このコマンドも表示せずに実行できます。 @はECHO OFFコマンド専用というわけではないので、ECHO OFFを使用せず、表示したくない コマンドだけ選択的に@をつけて隠すこともできます。 |
■■■ワイルドカードを使う■■■ ワイルドカードというのは、コマンドでファイル名や拡張子、フォルダ名を指定する際に、 「この部分は何でもいい」という意味で使う記号です。 複数のファイルを一括して指定できるので、コピーや削除、一覧表示など、いろいろな場面で 非常に良く使う機能です。 ワイルドカードには、 どんな文字でも何文字でもいい ・・・ 「*」 どんな文字でもいいが1文字 ・・・ 「?」 この2種類があります。 |
■■■ラベルを使う■■■ GOTOコマンドで処理先をジャンプする場合、ジャンプ先の位置を示すために、「:ラベル名」という行を 作っておきます。それを利用して「GOTO ラベル名」というようにジャンプを行ないます。 「:eof」というラベル名は暗黙で定義されていて、「GOTO :eof」とすると、ラベルなしで バッチファイルの末尾にジャンプ(終了)します。 例 繰り返しを行う @echo off :LOOP echo "ループ" GOTO :LOOP 実行結果 "ループ" "ループ" "ループ" "ループ" : : 注意 [Ctrl]+[C]を押すと処理が強制終了されます。無限ループに陥っても慌てず騒がず [Ctrl]+[C] |
■■■サブバッチ・サブルーチンを利用する■■■ 実行中のバッチファイル(メインバッチ)内から、他のバッチファイル(サブバッチ)を 起動して利用するには、CALLコマンドを使います。 起動したバッチファイルに引数を渡すことも出来ます。 例 書き方 CALL SUB.BAT 引数1 引数2 引数はスペース区切りで指定します。 バッチファイルの名kに「・・・.exe」などの実行プログラムを記述すると、そのプログラムを起動してから さらにバッチ処理を継続します。しかし、「・・・.exe」などではないバッチファイルを バッチファイル中にそのまま記述すると、記述したバッチファイルを実行することはできますが、 そのまま起動したバッチファイルに処理が引き継がれ、元のバッチファイルに続きがあっても 戻ってきません。 それに対して、CALLコマンドを使ってサブバッチを呼び出した場合は、呼び出したバッチファイルの 処理が終われば、ちゃんと元のバッチファイルに戻って続きを実行してくれます。 他のバッチファイルだけでなく、自分自身を再帰的に呼び出して実行することも可能です。 ただし、そうした使い方は無限ループに陥りやすいので、終了条件の設定に注意してください。 コマンドプロンプト拡張機能が有効になっている場合は、同一バッチファイル内のサブルーチンを 呼び出すこともできます。その場合、サブルーチンとして使うプログラムの先頭にラベル行を 設定しておき、「CALL :ラベル名」という形で呼び出します。呼び出す際には、引数も指定できます。 他のバッチファイルでもサブルーチンの呼び出しでも、呼び出されたプログラムの実行が終了すると、 CALLコマンドの次の行に戻って処理を継続します。 例 書き方 echo 始まり call :sub 引数1 引数2 echo 終わり goto :eof :sub echo サブルーチン始まり echo 第1引数=%1 第2引数=%2 echo サブルーチン終わり |
■■■日付を変数にセットする■■■ 意外と知られていないようですが、日付を変数にセットするには、下記の方法を用います。 SET HIDUKE=%DATE% 例 prompt $D $T$G SET HIDUKE=%DATE% %TIME% echo %HIDUKE% 実行結果 C:\>prompt $D $T$G 2004/04/09 23:26:05.46>SET HIDUKE=%DATE% %TIME% 2004/04/09 23:26:05.48>echo "%HIDUKE%" "2004/04/09 23:26:05.46" 2004/04/09 23:26:05.51> 「SET PWD=%CD%」これで現在のカレントディレクトリパスを環境変数にセットすることもできます。 このように、コマンドを「%」で囲み環境変数として扱い、別環境変数にセットします。 %CD% - 現在のディレクトリ文字列に展開します。 %DATE% - DATE コマンドと同じフォーマットで現在の日付に展開します。 %TIME% - TIME コマンドと同じフォーマットで現在の時刻に展開します。 %RANDOM% - 0 から 32767 の間の任意の 10 進数に展開します %ERRORLEVEL% - 現在の ERRORLEVEL の値に展開します。 %CMDEXTVERSION% - 現在のコマンド プロセッサ拡張機能のバージョン番号に展開します。 %CMDCMDLINE% - コマンド プロセッサを起動したオリジナル コマンドラインに展開します。 |
■■■確認メッセージ自動入力■■■ たとえば、バッチファイルの中で「DEL *.*」というワイルドカードを使った全削除のコマンドを使うと そこで自動的に一時停止し、 よろしいですか (Y/N) ? といったメッセージが表示されます。ここで、自分で「Y」キーを押さないと先に進まないため、完全自動化になりません。 こうした場合、「Y」入力が必要なコマンドの前にECHOコマンドを使い、 echo Y | del *.* というように書いてやると、自動的に「Y」を入力して先に進んでくれます。 ECHOというのは画面表示のコマンドと思われがちですが、正確には、「指定された場所にテキスト出力する」 というコマンドです。このようにパイプ機能で出力先を指定すれば、画面表示ではなく、次のコマンドに対して 文字を出力してくれるわけです。 |
■■■メッセージを非表示にする■■■ たとえば、 C:\>pause 続行するには何かキーを押してください . . .[キー入力] C:\> PAUSEコマンドは、このように自動的に「続行するには何かキーを押してください . . .」という メッセージが表示されます。 このメッセージを、非表示にするには、 pause > nul というように「> nul」を書き加えます。 この「> nul」というのは、出力先をNULに変更する、という指定です。 「>」は、出力先を指定する機能です。これを使って「nul」に出力させていますが、 NULというのは「存在しない」とか「無効」という意味で、存在しないところへメッセージ出力させ、 結果としてメッセージを消してしまうという処理をさせるわけです。 このメッセージをNULに出力して消してしまうというテクニックは、いろいろなコマンドに応用できます。 |
■■■キー入力させる■■■ SETコマンドを利用すると、自由な長さの文字列をバッチファイル中でキー入力させることが出来ます。 利用するのは、 SET /P [変数名]=[プロンプト文字列] というコマンドです。 例 :START SET /P x="フォルダを指定してください。 >" IF "%x%"=="" goto END Dir %x% /w goto START :end set x= |
戻る |