>>760
require 'win32ole'
shell = WIN32OLE.new('WScript.Shell')
shell.Run("cmd /c dir /b /s 2>&1 > dir.txt", 0, true)

これでウィンドウが開かなくなるとは思う
出力をファイルハンドルで受けられないのが不便だが