2010-02-03
■ Windowsコマンドプロンプト基礎文法最速マスター
Windowsコマンドプロンプトの文法一覧です。他の言語をある程度知っている人はこれを読めばコマンドプロンプトの基礎をマスターしてバッチファイルを書くことができるようになっています。簡易リファレンスとしても利用できます。
1. 基礎
メッセージ表示
ECHO Hello, world.
コメント
コメントには「REM」(Remarks の略)を用いることが多いですが、「::」(本来はラベル)でもコメントの代用が可能です。ただし IF や FOR のブロック内では「::」はエラーになるので注意してください。
REM コメントその1 :: コメントその2
変数の宣言
SET コマンドで変数(環境変数)の設定を行います。変数名と「=」の間は空白を入れず詰めて入力するようにしましょう(空白を含んだ変数名が設定されてしまう為)
SET 変数名=[文字列] SET /A 変数名=[数式]
変数を参照する場合は、%変数名% と「%」で囲む必要があります。
ECHO %変数名%
バッチファイルの実行
バッチファイルを実行するにはコマンドラインで次のようにします。
script.bat [Enter]
または
script.cmd [Enter]
.bat(Windows バッチファイル)と .cmd(Windows コマンド スクリプト)の大きな違いはありません。
スクリプトに同じ名前を付けた場合は .BAT が優先されます。優先順位は SET PATHEXT にて確認できます。
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
出力結果をファイルに書き出すにはリダイレクトを使います。「>」は上書きで「>>」は追記になります。
script.bat > file.txt [Enter]
2. 数値
数値の表現
SET コマンドの /A オプションを用いることで変数に数値を代入することができます。なお、代入できるのは整数(32bit 値)のみで、小数は代入できません。
SET /A num=-2147483647 … OK SET /A num=0 … OK SET /A num=123 … OK SET /A num=2147483647 … OK SET /A num=2147483648 … NG :「無効な数字です。数値は 32 ビットで表記される数値です。」 SET /A num=1.23 … NG :「演算子がありません。」
数値は、16進数、8進数表記での設定も可能です。
SET /A num=0x12 … OK : 16進数(値は28) SET /A num=022 … OK : 8進数(値は28) SET /A num=09 … NG :「無効な数字です。数値定数は 10 進 (17 桁)、16 進 (0x11 桁)、または 8 進 (021 桁) です。」
四則演算
四則演算です。
SET /A num=1+1 … 2 SET /A num=1-1 … 0 SET /A num=1*2 … 2 SET /A num=1/2 … 0 : 小数は切り捨て(商) SET /A num=1/0 … NG : 0 除算エラーです。
余りの求め方です。コマンドラインで実行する場合は「%」、バッチファイルで実行する場合は「%%」を指定します。
SET /A num=3%2 … 1(余り)
インクリメントとデクリメント
インクリメントとデクリメントです
:: インクリメント SET /A num+=1 :: デクリメント SET /A num-=1
3. 文字列
文字列の表現
文字列には引用符(ダブルクォーテーション等)を指定する必要はありません。また「=」の後の空白も文字列として処理されます。
SET str1=abc SET str2=de f SET str2= g hi
文字列操作
文字列を結合する方法です。
:: 結合 SET str1=aaa SET str2=bbb SET str3=%str1%%str2% … aaabbb
配列に分割する機能はありません。
文字列の長さを求めるコマンドはありませんが、以下のようなバッチファイルで代用可能です。結果は ERRORLEVEL にセットされます。
@ECHO OFF REM File : GetLength.bat REM Usage : GetLength.bat abcde IF "%1"=="" GOTO :EOF SET /A LENGTH=0 SET LAST=%1 :LOOP SET /A LENGTH+=1 SET LAST=%LAST:~1% IF NOT "%LAST%"=="" GOTO LOOP EXIT /B %LENGTH%
文字列から任意の位置の場所の文字を切り出す方法です。
:: 切り出し SET str1=abcd SET str2=%str1:~0,2% … ab(1桁目(オフセット0)から2文字)
4. 配列
配列はありません。
5. ハッシュ
ハッシュ変数はありません。
6. 制御文
IF コマンド
IF 文に相当します。1行に書く形式とブロック形式の構文が利用できます。
IF 条件 処理
ブロック形式の IF 文には () を用います。
IF 条件 ( 処理 ) ELSE ( 処理 )
ただしブロック形式では以下のような書き方をするとエラーになるので注意してください。
<エラーになる例> IF 条件 ( 処理 ) ELSE ( 処理 )
条件の箇所には、以下のような条件を指定することができます。
IF [NOT] ERRORLEVEL 番号 コマンド IF [NOT] 文字列1==文字列2 コマンド IF [NOT] EXIST ファイル名 コマンド IF 文字列1 比較演算子 文字列2 コマンド
比較演算子は次のいずれかになります。
EQU - 等しい NEQ - 等しくない LSS - より小さい LEQ - 以下 GTR - より大きい GEQ - 以上
条件ループ
WHILE 文はありませんが、GOTO コマンドと条件式を組み合わせることで代用可能です。
SET /A 変数=0 :LOOP 処理 IF "%変数%"=="終了値" GOTO END SET /A 変数+=1 GOTO LOOP :END
FOR コマンド
FOR /L ~ が、他の言語の FOR 文に相当します。
%変数には任意の単一文字(大文字、小文字は区別される)を指定可能ですが一般的には %i を用いることが多いようです。コマンドラインで実行する場合は「%変数」、バッチファイルで実行する場合は「%%変数」とします。
FOR /L %変数 IN (開始,増分,終了) DO コマンド [コマンドパラメータ] <例> FOR /L %i IN (1,1,3) DO @ECHO %i <実行結果> 1 2 3
また、以下の構文により他の言語の FOR EACH ~(配列やコレクションを参照する機能)と同様の使い方も可能です。
FOR %変数 IN (セット) DO コマンド [コマンドパラメータ] <例> FOR %i IN (aaa bbb ccc) DO @ECHO %i <実行結果> aaa bbb ccc
7. サブルーチン
CALL コマンドでバッチファイルを呼び出すか、:ラベル名を指定します。引数は %1, %2, %3, ... としてセットされます。
サブルーチンの戻り値は EXIT /B [終了コード] を指定することで ERRORLEVEL として返却可能です。
CALL :SUM 1, 2 ECHO %ERRORLEVEL% GOTO END :SUM SET /A num1=%1 SET /A num2=%2 SET /A total=num1+num2 EXIT /B %total% :END
8. ファイル入出力
FOR コマンドの /F オプションを利用することでファイルを解析し読み込むことが可能です。
以下のサンプルはファイルを1行ずつ読み込み出力ファイルに追記するサンプルです。コマンドラインで実行する場合は「%変数」、バッチファイルで実行する場合は「%%変数」とします。
FOR /F "tokens=*" %i IN (input.txt) DO ECHO %i>> output.txt
9. 知っておいたほうがよい文法
バッチファイルでよく出てくる知っておいたほうがよい文法の一覧です。
ECHO OFF
バッチファイル実行時は不要なメッセージを表示させないのが通例です(デバッグ時は除く)。
以下の1行をバッチファイルの先頭に入れると以降のコマンドが画面上に表示されなくなります。
コマンドの前に @ を付けることによって、そのコマンド自身もコマンドプロンプトに表示されなくなります。
@ECHO OFF
%~ 構文
%~ 構文は %変数 を様々な情報に展開します。以下は %0 を %~ 構文に従って展開した例です。
ECHO %~0 … ファイル名 :[test] ECHO %~f0 … フルパス :[C:\home\edu\BAT\expand\test.bat] ECHO %~d0 … ドライブ名 :[C:] ECHO %~p0 … パス名のみ :[\home\edu\BAT\expand\] ECHO %~n0 … ファイル名 :[test](拡張子無し) ECHO %~x0 … 拡張子 :[.bat] ECHO %~s0 … 短い名前のみ :[C:\home\edu\BAT\expand\test.bat] ECHO %~a0 … ファイル属性 :[--a------] ECHO %~t0 … ファイル日付 :[2010/02/05 00:45] ECHO %~z0 … ファイルサイズ:[204] ECHO %~dp0 … ファイルの場所:[C:\home\edu\BAT\expand\] ECHO %~nx0 … ファイル名 :[test.bat](拡張子付き) ECHO %~fs0 … 完全なパスと短い名前:[C:\home\edu\BAT\expand\test.bat] ECHO %~ftza0 … 複合表示 :[--a------ 2010/02/05 00:45 204 C:\home\edu\BAT\expand\test.bat]
例えば、バッチファイルのある場所に移動するには、以下のコマンドを実行します。
cd /d %~dp0
参考情報
その他の基礎文法マスター
この記事は他の基本文法マスターに便乗して書いた物です。誤り等ございましたらコメント等して頂けると助かります。
- Perl基礎文法最速マスター - Perl入門~サンプルコードによるPerl入門~
- Route 477 - Ruby基礎文法最速マスター
- PHP基礎文法最速マスター | Shin x blog
- Python基礎文法最速マスター - D++のはまり日誌
- Java基礎文法最速マスター - 何かしらの言語による記述を解析する日記
- VBA基礎文法最速マスター - 何かしらの言語による記述を解析する日記
- Brainf*ck基礎文法最速マスター - 医者を志す妻を応援する夫の日記
- Haskell基礎文法最速マスター - think and error
- Bash基礎文法最速マスター - 何かしらの言語による記述を解析する日記
- VBScript 基礎文法最速マスター - CX's VBScript Diary - VBScript グループ
- JavaScript基礎文法最速マスター - なんとなく日記