2011年3月5日土曜日

FOR のオプション無し = FOR文でファイルだけを処理する、もしくは、文字列を処理する - Windowsのコマンドプロンプト(bat,cmd)

WindowsコマンドのFOR ▲
○Windows XP
FOR文にオプションを付けない場合、ワイルドカードの有無によって動きが変わります。

o ワイルドカード(「*」や「?」)を使う場合 = 見つかったファイル毎に実行します。
o ワイルドカードを使わない場合 = 指定した文字列が、そのまま渡ります。実行は1回です。
o ファイル名や文字列を複数指定する事が出来ます。空白やカンマで区切ります。


**** 書式
--------
for %変数名 in ( ファイル名や文字列 ) do 実行するコマンド
--------

o コマンド名やキーワードは、大文字小文字のどちらでも大丈夫です。
    + 但し、変数名に限り、大文字小文字を区別します。
o %変数名 = 変数になる名前です。変数名は1文字で指定します。(例: %i)
    + バッチファイルでは、%%変数名。「%」を2つ書きます。
    + 変数名のおすすめは、英字1文字。こちらはヘルプに書かれています。
        + 大文字小文字を区別しますので、使う時には気を付けます。
        + (仕様外の動作)実際には、英字の他に、数字や、漢字などの全角文字も使用出来ました。(= Windows XPの場合です。)
o ファイル名や文字列 = ファイル名、もしくは、実行するコマンドに渡したい文字列です。
    + 複数指定する事が出来ます。空白やカンマで区切ります。
    + ワイルドカード(「*」や「?」)を使用出来ます。
        + ワイルドカードは、「\」や「/」の左側で使う事は出来ません。
        + 例えば、「*\miku3.txt」の検索結果は0件です。
    相対パスも指定出来ます。
        + 空白付きのファイル名を指定する方法は、少し下に記します。
    + ワイルドカードを使わない場合は、渡したい文字列を書く事が出来ます。
        + 条件は、文字列中に「*」「?」空白、カンマを含まない事
        + この時、FOR文は、ファイルの存在判定を行いません。
    + 次の時は、「"」で括り、ワイルドカードを含めて指定します。
        + 空白やカンマ付きのファイル名を指定する時(例「"d:\a\miku san.txt?"」)
        + UNIX形式の区切り文字「/」を指定する時(例「"d:/a/mikusan.txt?"」)
        + ファイル名の中に「*」や「?」が含まれていないと、単なる文字列とみなしますので、注意します。
o 実行するコマンド = DO の後に書きます。
    + 複数並べたい時は、丸括弧(= 小括弧)で括る事も出来ます。
        + 括弧内で「環境変数を設定し、その値を参照する」時には、小技が必要になります。
        + 詳しくは、「バッチファイル。IF文やFOR文の中で複数コマンドを書く時の注意点」
    + 大掛かりになる時は、CALL文が便利です。
    + 変数の使い方については、こちらをどうぞ
        + 「%変数の使い方」
        + 「環境変数の使い方。置換と部分文字列」


**** 戻り値 ( ERRORLEVELの値。確認分のみ )
o (設定なし) = このコマンドは、ERRORLEVELの値を更新しません。
    + 但し、FOR の中で実行するコマンドが ERRORLEVELの値を更新する事があります。
    + 「(ミクさん) の使い方が誤っています。」 = 括弧の前に IN が抜けています。


**** 使用例
o コマンドプロンプト画面で動かす時の書き方
--------
@echo off
for %f in ("c:\ミクさん\*.txt") do echo ミクさんのメモ : %f
echo on
--------

    + コマンド名やキーワードは、大文字小文字のどちらでも大丈夫です。

o バッチファイルで動かす時の書き方
--------
@echo off
for %%f in ("c:\ミクさん\*.txt") do echo ミクさんのメモ : %%f
--------

    + 変数名の前に「%」を2つ付けます。


**** 機能
o ワイルドカード(「*」や「?」)を使ったパスを指定すると、ファイルや指定したファイル名(もしくはフォルダー名)を探して繰り返し実行します。
    + 隠しファイル属性を持つファイルは、検索対象から除外されます。
    + 見つけたフォルダーのパスは、変数の中に入れます。

o ワイルドカードを使わない場合、単なる文字列として、1回だけ実行します。
    + 指定した文字列は、変数の中に入れます。
o 空白やカンマで区切ると、複数のファイル名(もしくは文字列)を指定する事が出来ます。
o ファイル名の中に空白やカンマを含めたい時は、ワイルドカードを使用して、かつ、「"」でパスを括ります。

o サブフォルダーの下も検索したい時は、/R オプションを使います。
    + 詳しくは「FOR /R = FOR文でサブフォルダーも処理対象にする」


**** メモ
o ワイルドカード使用時、隠しファイル属性を持つファイルは、検索対象から除外されます。
o ワイルドカードを使わない時の動作は、単なる文字列渡しです。


**** 確認したバージョン
o Windows XP Service Pack 3


==
関連ページ:
    ▼FOR = 繰り返し実行する
    ▼Windowsコマンド。制御文と環境変数(▼ABC順)
    ▼コマンドプロンプト画面
    ▼制作メモ
    > FOR /D = FOR文でフォルダーだけを処理する、もしくは、文字列を処理する
    FOR /R = FOR文でサブフォルダーも処理対象にする
    FOR /F + DIR /B = ファイル名を順番に取り出して実行する方法
(2011年5月16日追加と訂正。書式欄の変数名。大文字小文字を区別する。推奨は英字のみ)
(2011年3月6日変更。パスの表記を、なるべくファイル名に変更)

FOR /D = FOR文でフォルダーだけを処理する、もしくは、文字列を処理する - Windowsのコマンドプロンプト(bat,cmd)

WindowsコマンドのFOR ▲
○Windows XP
FOR文を普通に書くと、ファイルだけを処理の対象にします。
/D オプションを付けると、フォルダーだけを処理の対象にする事が出来ます。

o ワイルドカード(「*」や「?」)を使う場合 = 見つかったフォルダー毎に実行します。
o ワイルドカードを使わない場合 = 指定した文字列が、そのまま渡ります。実行は1回です。
o フォルダー名や文字列を複数指定する事が出来ます。空白やカンマで区切ります。


**** 書式
--------
for /d %変数名 in ( フォルダー名や文字列 ) do 実行するコマンド
--------

o コマンド名やキーワードは、大文字小文字のどちらでも大丈夫です。
    + 但し、変数名に限り、大文字小文字を区別します。
o /d = /D オプションです。
    + サブフォルダーの下も検索したい時は、/R オプションも一緒に使います。
    + 詳しくは「FOR /R = FOR文でサブフォルダーも処理対象にする」
o %変数名 = 変数になる名前です。変数名は1文字で指定します。(例: %i)
    + バッチファイルでは、%%変数名。「%」を2つ書きます。
    + 変数名のおすすめは、英字1文字。こちらはヘルプに書かれています。
        + 大文字小文字を区別しますので、使う時には気を付けます。
        + (仕様外の動作)実際には、英字の他に、数字や、漢字などの全角文字も使用出来ました。(= Windows XPの場合です。)
o フォルダー名や文字列 = フォルダー名、もしくは、実行するコマンドに渡したい文字列です。
    + 複数指定する事が出来ます。空白やカンマで区切ります。
    + ワイルドカード(「*」や「?」)を使用出来ます。
        + ワイルドカードは、「\」や「/」の左側で使う事は出来ません。
        + 例えば、「*\miku3」と書いても、a\miku3 フォルダーを見つける事は出来ません。
    相対パスも指定出来ます。
        + フォルダー名に空白を含める方法は、少し下に記します。
    + ワイルドカードを使わない場合は、渡したい文字列を書く事が出来ます。
        + この時、FOR文は、フォルダーの存在判定を行いません。
    + 次の時は、「"」で括り、ワイルドカードを含めて指定します。
        + 空白やカンマ付きのフォルダーを指定する時(例「"d:/a/miku san?"」)
        + UNIX形式の区切り文字「/」を指定する時(例「"d:/a/miku san?"」)
        + フォルダー名の中に「*」や「?」が含まれていないと、単なる文字列とみなしますので、注意します。
o 実行するコマンド = DO の後に書きます。
    + 複数並べたい時は、丸括弧(= 小括弧)で括る事も出来ます。
        + 括弧内で「環境変数を設定し、その値を参照する」時には、小技が必要になります。
        + 詳しくは、「バッチファイル。IF文やFOR文の中で複数コマンドを書く時の注意点」
    + 大掛かりになる時は、CALL文が便利です。
    + 変数の使い方については、こちらをどうぞ
        + 「%変数の使い方」
        + 「環境変数の使い方。置換と部分文字列」


**** 戻り値 ( ERRORLEVELの値。確認分のみ )
o (設定なし) = このコマンドは、ERRORLEVELの値を更新しません。
    + 但し、FOR の中で実行するコマンドが ERRORLEVELの値を更新する事があります。
    + 「(ミクさん) の使い方が誤っています。」 = 括弧の前に IN が抜けています。


**** 使用例
o コマンドプロンプト画面で動かす時の書き方
--------
@echo off
for /d %f in ("c:\ミクさん\*") do echo ミクさんのフォルダー : %f
echo on
--------

    + コマンド名やキーワードは、大文字小文字のどちらでも大丈夫です。

o バッチファイルで動かす時の書き方
--------
@echo off
for /d %%f in ("c:\ミクさん\*") do echo ミクさんのフォルダー : %%f
--------

    + 変数名の前に「%」を2つ付けます。


**** 機能
o ワイルドカード(「*」や「?」)を使ったパスを指定すると、フォルダーだけ探して繰り返します。
    + 見つけたフォルダーのパスは、変数の中に入れます。
o ワイルドカードを使わない場合、単なる文字列として、1回だけ実行します。
    + 指定した文字列は、変数の中に入れます。
o 空白やカンマで区切ると、複数のフォルダー名(もしくは文字列)を指定する事が出来ます。
o フォルダー名の中に空白やカンマを含めたい時は、ワイルドカードを使用して、かつ、「"」でパスを括ります。


**** メモ
o ワイルドカード使用時、隠しファイル属性を持つファイルは、検索対象から除外されます。
o ワイルドカードを使わない時の動作は、単なる文字列渡しです。


**** 確認したバージョン
o Windows XP Service Pack 3


==
関連ページ:
    ▼FOR = 繰り返し実行する
    ▼Windowsコマンド。制御文と環境変数(▼ABC順)
    ▼コマンドプロンプト画面
    ▼制作メモ
    > FOR /R = FOR文でサブフォルダーも処理対象にする
    FOR /F + DIR /B = ファイル名を順番に取り出して実行する方法
    FOR /F その1 = ファイルを1行ずつ取り出して実行する
(2011年5月16日追加と訂正。書式欄の変数名。大文字小文字を区別する。推奨は英字のみ)
(2011年3月6日変更。パスの表記を、なるべくファイル名に変更)

2011年3月4日金曜日

AWKで入力ファイルの指定を不要にする方法 - AWK

AWKプログラムを動かす ▲
AWKのパターンと制御文 <▲>
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
AWKプログラムの書き方を工夫すると、入力ファイルの指定が無くても動かす事が出来ます。


**** 原理
o 次の時、AWK は入力ファイルが無くても、データ入力を要求せずに動きます。
    + BEGIN パターン以外のパターンを書かない時。
    + もしくは、BEGIN パターン内で入力ファイルを設定した時。
o ですので、入力ファイルの指定を不要にしたい時は、この条件のどちらかを満たすように書きます。


**** 手順
o BEGIN パターンだけ書く方法
--------
BEGIN {
    print "眠れない時は、";
    for (i = 1; i <= 39; ++i) {
        print "ミクさんが " i "人。";
    }
}
--------

    + 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。

o 入力ファイルをプログラムで追加する方法
--------
BEGIN {
    ARGV[ARGC++] = "ミクさんの食べ物リスト.txt";
}
{
    print $0;
}
--------

    + 詳しくは、「AWKの入力ファイルを、AWKプログラムの中で追加、削除(= キャンセル)する方法」


**** メモ
o BEGIN パターンだけの使い方は、特に、大量のテストデータを作る時に便利です
    + 問題が起きた時はメモ帳でも修正出来ますし、持ち運びも簡単です。
    + テスト終了後、テストデータは削除してしまっても、後で再作成出来ます。
o プログラムが途中で止まっているように見える時は、試しに文字を入力してみます。
    + 文字が入力出来る時は、AWKが、画面からのデータ入力を要求しています。
    + そのような時は、「Ctrl」キーを押しながら「Z」キーを押すと先に進みます。
    + 詳しくは、「入力ファイルを手入力する方法」


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3
o Mawk for Windows 1.3.3
o original = the one true awk(updated May 1, 2007)


==
関連ページ:
    ▼AWKプログラムを動かす
    ▼AWKのパターンと制御文(▼ABC順)
    ▼AWKプログラムを書く(▼ABC順)
    ▼AWK
    ▼制作メモ
    > AWKの入力ファイルを、AWKプログラムの中で追加、削除(= キャンセル)する
    入力ファイルを手入力する
    AWKPATH = コマンドでAWKファイル名を指定する時、ファイルの場所を省略する(Gawk, mawk32専用)
    BEGIN = 最初に実行する