history

青木日記 RSS

<前の日 | この月 | 次の日>

2004-02-26

cmd.exe

なんでいまさら cmd.exe の仕様を調べねばならんのだ……。

公式仕様がみつかりません。

(05:25)

追記

そもそもなぜこんなことを調べているかというと、クックブックがきっかけです。 「Rubyスクリプトを名前だけで実行可能にする」という項目があって、 そこに mswin32 版 ruby が使ってる方法を書いてたんです。 そうしたら、ゆうぞうさんに「%0 ってないの?」とつっこまれて、 調べてるうちに深みにはまった。

調べた結果は次の通り。 cmd.exe にも %0 は存在して、実際最初は「"%0"」だった ([ruby-dev:18895] instruby.rb 1.32)。 しかし Ruby が複数インストールされている環境を考慮して絶対パスになった。 ([ruby-dev:19370] instruby.rb 1.40)。

(06:08)

VC++ for Alpha

Alpha 用の VC++ が 6.0 まであるなんて知らなかった。

(06:11)

UNIX → Windows

UNIX プログラマ向けに Windows 世界の概要を説明してくれる本ってないですかねえ。 内容はこんな感じだといいなあ。

  • 文字コード関係 (主にユニコード)
  • ファイルシステムと hier
  • レジストリの hier
  • パッケージの管理
  • アカウント管理
  • プロセスとサービス
  • COM 基礎
  • バッチファイルのまとめ
  • WSH
  • .NET

もちろん全部概要でいいんですけど。 入門よりもしっかりしていて、 ちゃんとプログラミングするんでもない、 その中間くらいが欲しい。

……というか、これはほとんど「俺が知りたいことリスト」 みたいなもんだな。

(06:40)

cmd.exe (2)

instruby.rb の変更ってこれですか。 タイムリーだなあ。

--- instruby.rb 23 Feb 2004 00:09:48 -0000      1.61
+++ instruby.rb 25 Feb 2004 12:16:14 -0000      1.62
@@ -74,6 +74,7 @@
 end
 
 def with_destdir(dir)
+  return dir if $destdir.empty?
   dir = dir.sub(/\A\w:/, '') if File::PATH_SEPARATOR == ';'
   $destdir + dir
 end
@@ -157,11 +158,11 @@
     open(with_destdir(batfile), "w") { |b|
       b.print <<EOH, shebang, body, <<EOF
 @echo off
-if "%OS%" == "Windows_NT" goto WinNT
+if not "%~d0" == "~d0" goto WinNT
 #{ruby_bin_dosish} -x "#{batfile}" %1 %2 %3 %4 %5 %6 %7 %8 %9
 goto endofruby
 :WinNT
-#{ruby_bin_dosish} -x "#{batfile}" %*
+"%~dp0#{ruby_install_name}" -x "%~f0" %*
 goto endofruby
 EOH
 __END__

なるほど。cmd.exe の変態記法をチェックして分岐するんですね。 まあ記法の変態さ加減では sh も負けてないか……。

えーと、%~f0 が %0 のフルパスで、%~dp0 が %0 の drive + dirname か。 利点は、prefix 以外にインストールされても rdoc が動く……でいいのかな。

(10:15)

カタ

コード=カタって表現を見るとどうしてもガン=カタを連想する。

(10:22)

本日のツッコミ(全3件) [ツッコミを入れる]
(う) (2004-02-26 09:24)

でも、昨夜なかださんと相談して、またcmd.exeの時だけ挙動を変えちゃったりしたのでした。てへ。

(う) (2004-02-26 09:49)

あと、cmd.exeの仕様は、微妙なこと以外はWindowsのヘルプに普通に載ってます。

あおき (2004-02-26 10:29)

ぐお。本当だ。ありがとうございます。
MSDN ばっかり見てました……。

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS