このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
さて、昨日は読み込んだ行を出力しただけだったが、
shebang を調べるためには、
行の内容を解析する必要がある。
しかし、コマンドプロセッサでは、
変数に対して行える操作は限られている。
特殊変数がもつ、パスの一部分を抜き出す機能は、
数少ない操作の一つである。
特殊変数は、コマンド引数や for の引数であるため、
ファイル名に対して使うことが多い。
そのためにそのような機能になっていると考えられる。
今回行いたいのは、変数の内容を分析することである。
if コマンドの文字列比較を使えば、
変数の内容をリテラルや他の変数と比較することはできるが、
変数の一部分を調べることはできない。
このようなことをするためには、
(環境)変数の力を借りる必要がある。
変数は、特殊変数と同じく特別な機能を持つ。
記述の方法により、文字列操作をすることができるのだ。
変数は %name% の形をしていることは前に述べた。
これを %name:~数値,数値% の記法を使うことによって、
変数の一部分を展開することができる。
上級言語における、substring のようなことができるのだ。
例えば、環境変数 OS には、
オペレーティングシステムの簡易名が入る。
これに対して上記の記法で部分的に取り出してみよう。
echo %os% => Windows_NT
一つ目の数値は、0 から始まる文字列の文字位置、
二つ目の数値は、抜き出す文字数だ。
echo %os:~0,7% => Windows
echo %os:~3,6% => dows_N
一つ目の数値を省略すると、0 とみなされる。
echo %os:~,7% => Windows
二つ目をカンマと共に省略すると残り全てを意味する。
echo %os:~8% => NT
一つ目に負の値を指定すると、文字列の最後から数える。
echo %os:~-2% => NT
echo %os:~-9,6% => indows
二つ目に負の値を指定すると、
指定した数値の絶対値文字数だけ後ろから除外する。
echo %os:~0,-2% => Windows_
echo %os:~4,-2% => ows_
echo %os:~-8,-4% => ndow
これらと、if コマンドを組み合わせれば、
文字列の部分比較が可能となる。
if /i "%os:~,7%"=="windows" echo Windows!