ループ使用のためのWindows batスクリプトを解説
Windowsのbatスクリプトにおけるfor文の基本形は、以下の通りです。
david@ubuntu:~/Desktop/goldfish$ make
make: execvp: arm-eabi-gcc: Permission denied
CHK include/linux/version.h
make[1]: `include/asm-arm/mach-types.h' is up to date.
CHK include/linux/utsrelease.h
SYMLINK include/asm -> include/asm-arm
CC kernel/bounds.s
/bin/sh: arm-eabi-gcc: Permission denied
make[1]: *** [kernel/bounds.s] Error 126
make: *** [prepare0] Error 2
cmd ウィンドウとバッチファイルを区別する理由は、どちらの環境でもコマンド文の動作は基本的に同じですが、細部が若干異なるからです。最も明らかなのは、cmd ウィンドウでは、後の形式変数 I をパーセント記号 1 つで参照しなければならない、つまり %I とするのに対し、バッチファイルでは、形式変数 I をダブルで参照しなければならない点です。 以下の説明は、特に強調しない限りバッチファイルの環境に基づいています。
まず、for文の基本的な要素にはどのようなものがあるのかを見てみましょう。
- for、in、doはfor文のキーワードで、この3つはどれも欠かせない。
- Iはfor文の形式変数への参照で、do以降の文の実行に変数lが関与しない場合でも、必ず出現させなければならない。
- in の後、do の前の括弧は省略できない。
- command1 は文字列または変数に、command2 は文字列、変数またはコマンド文に使用します。
以下は、Windowsのbatスクリプトのデモです(demo1と記します)。
david@ubuntu:~/Desktop/goldfish$ arm-eabi-gcc
bash: /home/david/Desktop/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc: Permission denied
これを.batファイル(バッチファイル)として保存し、実行すると、ポップアップするバッチウィンドウに次のメッセージが表示されます。
バッチファイルのforループは、このようにシンプルです。ここでは、for文の「やるべきこと」と「やってはいけないこと」を説明し、より複雑なforループの例を実行します。
- for文の形式変数Iは、大文字と小文字を区別する26文字のいずれかに置き換えることができます。つまり、%%Iと%%iは同じ変数とはみなされません。形式変数Iは他の文字に置き換えることもできますが、バッチ内の10の形式変数%0~%9と競合しないように、%%Iを%%0~どれか一つに任意に置き換えないように注意してください。
- inとdoの間のcommand1で表される文字列や変数は1つでも複数でもよく、それぞれの文字列や変数を要素と呼び、各要素の間はスペースバー、ジャンプボックス、カンマ、セミコロン、等号で区切られます。
- for文は、command1の各要素を順番に抽出し、その値を形式変数Iに代入し、doの後にcommand2に持ってきてコマンドの実行に参加させる。また、1要素ずつ抽出し、command2に持ってきてコマンド2の動作に参加するかどうかに関係なく、一旦doの後のコマンド文の実行に入る。doの後のステートメントの実行が1回終了したとき doステートメントが実行された後、command1の次の要素が抽出され、再びcommand2が実行されるというように、command1のすべての要素が抽出され、forステートメントの終了が宣言されるまで、doの後のステートメントは実行される。
それを踏まえて、次の例を見てみましょう。demo1 の一部を変更する(demo2 と記す)と、結果が大きく変わります。
david@ubuntu:~/Desktop/goldfish$ sudo arm-eabi-gcc
sudo: arm-eabi-gcc: command not found
実行結果は以下の通りです。
bbs.bathome.cn という文字列のドットを、スペース、空白、等号に置き換えると、demo2 と同じ結果になります。
さて、demo2のコードの中のfor文の実行を解析してみましょう。
1. for文は、文字列A,B,Cを3つの要素にスライスしている。カンマを区切りとしてA,B,Cの3つの要素にスライスしているので、doの後の文が3回実行されることが確定しています。
2. 最初の実行は次のようになる。文字列bbsは形式変数Iの値としてポストdo文に持ち込まれる、すなわち, したがって、1回目の実行結果は画面上の文字列Aとなる。2回目の実行は、Iの値が置き換わった以外は1回目と同じである。2回目の実行は、Iの値が command1 の2番目の要素である文字列Bに置き換えられた以外は1回目と同じであり、以下、3度目の echo を実行して for 文全体を完了し、その時点で次の文、pause 命令が実行される。
高度な使い方
1) カレントディレクトリにどんなファイルがあるか検索する?
david@ubuntu:~/Desktop/goldfish$ env | grep PATH
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
DEFAULTS_PATH=/usr/share/gconf/ubuntu-2d.default.path
PATH=/home/david/Desktop/perbuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:/home/david/Desktop/prebuilt/linux-x86/toolchain/arm-eabi -4.4.3/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:opt/jdk1.7.0_03/bin:/ opt/jdk1.7.0_03/jre/bin
MANDATORY_PATH=/usr/share/gconf/ubuntu-2d.mandatory.path
CLASSPATH=. :/opt/jdk1.7.0_03/lib
2) カレントディレクトリにあるすべてのテキストファイルを検索しますか?
@echo off
for %%i in (*.txt) do echo "%%i"
pause
概要
Windows bat script for loop usageの記事は以上です。Windows bat script for loop usageの詳細については、過去の記事を検索するか、以下の関連記事を引き続き参照してください。
関連
-
cmdデスクトップショートカット一括作成ツール
-
バッチスクリプトによる特定ディレクトリでのGit-Bashウィンドウの立ち上げ
-
bat は set /a 計算後の日付と時刻をインターセプトします、08 と 09 は不正な 8 進数として扱われます
-
バッチ関数の効率的な代替アプリケーション(コールフリー)
-
バッチリ名称変更シリーズ ケースコード
-
Windowsのcmdコマンドラインの入出力リダイレクト問題
-
Oracle、mysqlのデータベース停止・起動バッチファイル
-
バッチ式再帰計算の実装コード N!
-
FTPファイル一括アップロード
-
Filemanのファイル名をフォームの対応する名前に一括インポートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン