ページ

2010-07-11

変態的な for コマンド

for コマンドを使ったことはありますが?

DOS Batchで使われるコマンドの中ではこれはトップクラスに変態的なコマンドではないかと思われます。

for って実はラムダ式?

forは繰り返しを指定する部分と、繰り返されるアクション部から構成されます。繰り返しの指定部分は、まあ多少変程度。繰り返しを受ける変数がアルファベット1文字に限定される、という制限があるぐらいです。これは、記述上は変数に見えますが、実体としてはfor文の構成要素として使われるものであって、通常の変数として扱うことはできません。その代わり、この変数に対しては、他では見られないような特別な演算が(アクション部で参照する場合に)定義されています。

どうも、この変数、意味合いとしては、C#のラムダ式での変数に近いかと思われます。変数は、例えばイテレーションの一つが評価される時点でイテレーションの値にバインドされて式が評価されることになります。というか、変数だけでなく、forコマンドそのものがラムダ式ではないかと思えます。forコマンドがラムダ式あると見なすと変態的な動作をする訳が理解できてきます。

for文の%%iはイテレーションの項目を示すものであって、変数ではありません。従って、後続するアルファベットで後続する項目を示すのもあり、になります。アクション部で多様な参照があるのも、変数ではないからです。そして、アクション部での外部変数への参照が、for文出現時の値に固定されるのも、ラムダ式として評価された時点での値になっているのだと考えれば(それなりに)納得できます。

でも、相当に変態的だと思いますがね。

2010-07-10

scコマンド使いまくり

sc コマンド初めて使いました。

コマンドラインからWindowsのサービスの制御を行なうためにscというコマンドがあります。

サービスの一覧は
  sc query state= all
で得られます。ちなみに State= と all の間には、空白が必要なようです。このパラメタ無しだとアクティブサービス限定になります。

で一覧で表示されたサービスのサービス名を使って、
  sc delete サービス名
で削除することができます。

先日、Oracleのサーバを手元のPCに一旦はインストールしたのですが、インストールし終わったタイミングでサーバ機到着、では、ということで直ぐにアンインストールすることになりました。しかしドジって一般ユーザでアンインストールプログラムを走らせてしまって、ごっそりとファイル(やレジストリ)が残ってしまいました。なら、と管理者権限のコマンドプロンプトからやり直そうとしたら、作業用のツール系はきれいさっぱりと削除されていてアンインストール処理不能になっていました。実にファンキーなアンインストーラです。

で、とりあえず、ファイルを強制削除、残ったサービス登録を上のscコマンドで削除しまくったのでした。