大谷と申します。

直接rubyの話ではなく、windowsでのスクリプト言語一般での話なのですが、
www.ruby-lang.orgやMLのログにも無いようで
ご存じない方も多いかと思い投稿します。

標準入力を読むスクリプトをW2K,WXPのコマンドプロンプトから実行する際、
C:\tmp>ruby aaa.rb < file
C:\tmp>DIR | ruby bbb.rb
のように明示的にruby.exeを起動すると動くのですが、拡張子関連付けを使い
C:\tmp>aaa < file
C:\tmp>DIR | bbb
のようにrubyを起動すると、読んだ時点で
Bad file descriptor (Errno::EBADF)
になってしまいます。
下記URLによると、
"Microsoft has confirmed that this is a problem in the Microsoft products"
とのこと。

解決策は、W2K SP4以降、WXP SP1以降で、レジストリの
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
    \Policies\Explorer
にInheritConsoleHandlesというDWord値を作り1をセットすると
(それ以降に起動したコマンドプロンプトで)
標準入力のリダイレクトやパイプでの受け取りが出来るようになります。
(XP Home?ではExplorerというキーも無いので新規作成する)

参考:
http://support.microsoft.com/default.aspx?scid=kb;en-us;321788

昨日WSHのMLで質問して教えていただきました。

-xオプションを使い、.rbでなく.BATファイルにすることでも回避できますが
これでダイレクトに解決できます。

Win9x系は上記ページに言及が無く、すぐ試せる環境も無いのでわかりません。

-- 
OOTANI TAKASHI <otn / rc5.so-net.ne.jp>