ということでまずはrarをzipにすることを考えてみた。
rubyの勉強がてら変換スクリプトをgoogle先生に相談しつつ組んでみました。
環境
-  OS -- Windows (commandline)
 
-  ruby 1.8.7 -- ruby-mswin32
 
-  unrar.exe -- UnRAR for Windows
 
-  zip.exe -- Windowsでzip.exeとunzip.exe
 
それぞれコマンドラインから使用できる状態にしておく
使用方法
$ ruby.exe rar2zip.rb [file.rar ...]
入力したrarファイルをzipに変換して出力します。
アーカイヴ名と内包するトップディレクトリ名が同じ場合、そのディレクトリ名を省略します。
rar2zip.rb
#!/bin/ruby -Ks
require 'tmpdir'
## error.
def failed(msg)
  puts "\nFailed!! -- #{msg}\n"
  abort
end
## system command.
def command(cmd)
  system cmd or failed "command failed.: #{cmd}"
end
## usage.
def usage
  print <<-EOS
rar2zip.rb ver 0.1
Usage: [ruby.exe] rar2zip.rb file.rar ...
  EOS
end
## main.
usage if ARGV.size==0
ARGV.each do |input|
  puts "#{input} ..."
  failed "file is not RAR." unless File.extname(input)=~/\.rar$/i
  output = File.expand_path(input).gsub(/\.\w+$/,".zip")
  failed "ZIP file already exists." if File.exist?(output)
  Dir.mktmpdir("temp-",".") do |temp|
    command "unrar x -inul \"#{input}\" #{temp}"
    dir = temp + "/" + File.basename(input,".*")
    dir = temp unless File.directory?(dir) && Dir.entries(temp).size==3
    Dir.chdir(dir) do
      command "zip -q -r \"#{output}\" *"
    end
  end
end
puts "Done."
所感
実装してて思ったのが、日本語ファイル名が意外と変換には厄介だということ。
文字化けしたり、途中でこけたりというアーカイバが結構あります。
大事なのは同じOSで、そのOS用にカスタムビルドしたツールを使うこと。
最初Cygwin上で実装しててはまりましたよ。ええ。
