Archive for the ‘Archiver’ Category

12月
16

Windowsのコマンドラインでバッチ処理を作るときに意外と困るのがファイルの圧縮・解凍で、Windows標準機能ではcabファイルしか取扱いできません。
WindowsXPやWindowsServer2003以降だとWindowsの標準機能でzipファイルの取扱いができるようになりましたが、それもエクスプローラ上などUIが必要でコマンドラインから圧縮・解凍可能なのはcabファイルだけです。
先日もサーバからダウンロードしたtar形式のファイルを解凍するバッチを作る事になったのですがWindowsの標準機能では解凍できません。
今回作成しようとしている、tarファイル解凍バッチはバッチ処理用サーバーOS上で動かす必要があり、安易にコマンドラインに対応している外部のアーカイバもインストールできません。
そこで試行錯誤した結果、吉岡 恒夫さんの作られたtar32.dllをWindows Script Host(WSH)で実行してtarファイルを解凍する方法をご紹介します。

まず今回作業するフォルダとして C:\Work\tar-test を作ります。

次に上記サイトのTAR32.DLL Ver2.xx(最新版) のDLL単体からtar32.dllをダウンロードして、C:\Work\tar-testフォルダに保存します。

次に適当に複数のファイルを圧縮したtar形式のファイルを準備してC:\Work\tar-testフォルダに保存します。
※圧縮するファイルは何でもいいです。

次にtar32.dllを実行してファイルを解凍するWSHを作ります。
C:\Work\tar-testフォルダにtar.jsというファイル名で保存します。

// WSH版tarコマンド
//
//  第一引数 オプション
// 第二引数 ファイル名
//
//

var objWshShell;
var objExecCmd;

if (funcParamCheck()) {
 try {
  objWshShell = WScript.CreateObject("WScript.Shell");
  objExecCmd = objWshShell.Exec("rundll32.exe C:\\Work\\tar-test\\tar32.dll, TarCommandLine " + WScript.Arguments(0) + " " + WScript.Arguments(1));
 } catch(e) {
  WScript.ECho("tarコマンド失敗!");
 } finally {
  objWshShell = null;
  objExecCmd = null;
 }
}

function funcParamCheck() {

 if (WScript.Arguments.Unnamed.Length == 0) {
  WScript.Echo("オプションの指定がありません。");
  return false;
 }
 if (WScript.Arguments.Unnamed.Length == 1) {
  WScript.Echo("ファイルの指定がありません。");
  return false;
 }

 return true;

}

ポイントとしては[rundll32.exe]というdllを実行する実行ファイルを使ってtar32.dllを実行しtarファイルを解凍しています。
またコマンド実行時にパラメタとしてtarコマンドのオプションとファイル名を受け取りtarファイルの圧縮・解凍ができるようにしました。

ここまでの準備でC:\Work\tar-testフォルダにはtar.js、test.tar、tar32.dllの3つのファイルが格納されているかと思います。

さてtarファイルの解凍ですが、コマンドプロンプトから以下のように入力します。

 cd \work\tar-test
 cscript tar.js xzvf test.tar

これでtest.tarファイルが解凍されたはずです。

またこの解凍したxmlファイルを別のtarファイルで再圧縮する場合は

 cd \work\tar-test
 cscript tar.js cvf “xml.tar *.xml”

これでxml.tarファイルができあがりました。

この後tar.jsの第一パラメタに「tvf」を渡してファイルの一覧を表示しようと思ったのですが、一覧は返ってきませんでした。

原因はわからなかったのですが、恐らくrundll32.exe経由でtar32.dllを実行している為だと思われます。
正しく圧縮できたか任意のアーカイバでtarファイルの中を参照して確認してみてください。

今度はWindowsXPやWindowsServer2003以降のWindowsOSで標準搭載されているzipファイルの圧縮・解凍をWSHで実装してみたいと思います。
恐らく今回同様rundll32.exeを使ってできるのではないかと思いますが、それは次回のお楽しみということで。

でわ!

  • Search:
  • flashcastとは?

    東京を中心に、現在フリーランスとして活動しているITエンジニア、および、かつてフリーランスとして活動していた起業家達が立ち上げたコミュニティーです。

    みんなで集まって面白いことをやろう!形に残そう!ということで、ブログをはじめました。

    技術情報や、フリーエンジニアに役立つ情報などを、ご紹介できたらと思っています。

    お問い合わせ:
    info@flashcast.jp
  • カレンダー

    2010年7月
    日曜日 月曜日 火曜日 水曜日 木曜日 金曜日 土曜日
    « 6月    
     123
    45678910
    11121314151617
    18192021222324
    25262728293031
  • メンバー紹介

    もじゃもじゃ
    flashcastのリーダー

    3年ほどフリーのITエンジニアとして活動。現在は、社員2名の株式会社を経営しています。

    一攫千金を夢見る野心家です。

    ライブキャスト

    yasu
    ダイバー

    自宅サーバーでホームページを作り始めました。

    少しずつ記事を増やしていきますので足を運んでください。

    よろしくお願いします。

    sa-sa-ki.jp

    のら
    たびびと

    ねこ好きに悪人はいなーいっ!!

    バイクや車も好きです。

    めぐ
    デザイナーのたまご

    音楽とデザインとお酒をこよなく愛する永遠のダイエッター。

    現在ペンタブレットでイラストを勉強中。

    Hiro
    コンサル

    PMやSEの案件を業務委託で請けることが多いですが、小規模案件も受託でやっています。

    得意な分野はマイクロソフト製品や関連技術によるシステム構築です。

    KEI
    取締役の風格

    最年少なのに、メンバーで1番の貫禄の持ち主!?

    C#や.netなどサーバ側の開発が得意。

    ろっきー
    美食家★パパ

    自分にとっての息抜きは、ドライブして温泉に入って、美味しいご飯を食べる事。

    ココロとカラダのリフレッシュを大切にし、日々の仕事に励む一児の父親です。

    郵便番号検索

    my-hobby

    とのさま
    げーむのおうさま

    大人なのに好きなことしかやらない駄目人間。

    Web系が得意、アクセスは苦手><

    tonosamart.com

    セクレタリアト
    ギャンブラー

    フリーランス時代は仲間の現場を探すことが多く、それをきっかけに会社を設立。

    現在はSI業に特化せず、他の業種にも興味を持ち始めています。

    メドレー株式会社

  • 広告