2004-02-26 10:55:53 +0900 (1729d); rev 2
以下、Windows 2000 SP4 の cmd.exe を仮定する。
このページでは引数を単に表示するだけのコマンド unixecho を使う。 そのソースコードを以下に示す。
/*
unixecho.c
*/
#include <stdio.h>
void
print_arg(const char *a)
{
int i;
for (i = 0; a[i]; i++) {
switch (a[i]) {
case ' ':
putchar('\\');
putchar(' ');
break;
case '\n':
putchar('\\');
putchar('r');
break;
case '\r':
putchar('\\');
putchar('r');
break;
case '\t':
putchar('\\');
putchar('t');
break;
default:
putchar(a[i]);
break;
}
}
putchar('\n');
}
int
main(int argc, char **argv)
{
int i;
for (i = 1; i < argc; i++) {
print_arg(argv[i]);
}
exit(0);
}
初期状態では、バッチファイル中のコマンドは 実行するタイミングで自動的に画面に出力される。
行頭に「@」を付けるとその行の出力を抑止する (make と同じ)。 「@」で始まるコマンドは「"@..."」で呼べる。
またグローバルにエコーを止めるには echo off と書いておけばよい。 echo off 自体も表示しないようにするためには 「@echo off」とする。
「"..."」は一つの引数になる。両端の「"」は外してプログラムに渡す。 「"」の対応がとれない場合は行末までが一つにつながり、前についている「"」は消える。
C:\>unixecho "a"
a
C:\>unixecho "a a"
a\ a
C:\>unixecho "a"a
aa
C:\>unixecho "a"b"a"
aba
C:\>unixecho "
(空文字列)
C:\>unixecho a"
a
C:\>unixecho "a
a
以下のあたりはとてもバグバグちっく。
C:\>unixecho "a""a a"a C:\>unixecho "a""a a"a C:\>unixecho """ " C:\>unixecho """" "
cmd.exe では「'」は特別扱いされない。
C:\>unixecho 'a a' 'a a' C:\>unixecho ' '
バッチファイルに引数を渡す場合は「=」でも引数が分割される。 (MS-DOS 3.3 にはすでにあるらしい)
C:\>type myecho.bat @echo off echo %1 echo %2 C:\>myecho.bat a=b a b C:\>unixecho a=a 独自コマンドの場合はそのまま a=a
バッチファイル中では コマンドラインオプションは %1 %2 %3 ... で取れる。 cmd.exe なら全部まとめて %* で渡すこともできる。 「%」という文字自体を書きたいときは「%%」とする。
C:\>type myecho2.bat @echo off unixecho %1 unixecho %2 unixecho %* unixecho %% unixecho % unixecho %a C:\>myecho2 a "b b" c a b\ b a b b c % a
コマンドラインでは「%1」と書いても何の意味もない。
C:\>unixecho %1 %1 C:\>unixecho %%1 %%1 C:\>unixecho %* %*
コマンド名 (バッチファイル名) は %0 で取れる。 呼ばれた名前のまま (相対または絶対パス) で渡される。 ok, ok.bat, .\ok, .\ok.bat, C:\bin\ok.bat など。
C:\>type progname.bat @echo off echo %0 C:\>progname progname C:\>progname.bat progname.bat C:\>C:\progname C:\progname
環境変数は %varname% で参照する 変数名の大文字小文字は無視される。
C:\>echo %COMSPEC% C:\WINNT\system32\cmd.exe C:\>echo %CoMsPeC% C:\WINNT\system32\cmd.exe
存在しない環境変数を指定すると展開されずに残る。
C:\>unixecho %unknown% %unknown%
環境変数は set コマンドで設定する。
例 set varname=val C:\>set c=OK C:\>echo %c% OK
右辺を空にすると変数を削除できる。 ただしスペースがあってはならない。
C:\>set c=OK
C:\>set c=
C:\>unixecho %c%
%c%
C:\>set c= 「=」のあとにスペースを入れてしまった
C:\>unixecho %c%
変数が空文字列として定義されている
set コマンドを引数なしで使うと 現在設定されている環境変数を一覧できる。
C:\>set
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\Administrator\Application Data
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=NOCTURNE
ComSpec=C:\WINNT\system32\cmd.exe
DISPLAY=localhost:0.0
EDITOR=vi
:
:
:
Related Pages: WindowsPages MsdosBatchFile
system revision 1.162