こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

差分のLZHファイルの作り方

win2000のDOSコマンドから実行する方法を模索しています。
指定するディレクトリの中身全部を圧縮するとき、別の場所に作ってある「A.LZH」と比較して差分ファイルだけを「B.LZH」の名前で圧縮するという方法はありませんか?
つまり、これから圧縮しようとするファイルに対し「A.LZH」の中に無い物だけを「B.LZH」として圧縮したいのです。
差分のバイナリファイルを作るフリーウェアが存在するようなのですが、どうしても差分のLZHを作りたいので。

通常はLHMeltを使っています。

投稿日時 - 2006-09-06 10:29:05

QNo.2387328

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

#2です。追記。
何らかのバックアップソフトを利用して定期的にバックアップをしている場合、バックアップ済みのファイルは全てアーカイブ属性がOffになってしまうので、この手は使えません。

投稿日時 - 2006-09-06 11:27:40

ANo.2

1.圧縮する際は各ファイルのアーカイブ属性がOnになっているものだけをdirコマンドを使いテキストファイルへリストアップする。
2.リストファイルを整形して、レスポンスファイルを作成する。(レスポンスファイルについてはunlha32.dll付属のcommand.txtを参照)
3.下記のlha32.exeを使って圧縮を開始。その際にレスポンスファイルをunlha32.dllへ渡す。
4.圧縮完了後attribコマンドを使い、全ファイルのアーカイブ属性を全てOffにする。
5.ファイルを新規追加(他のフォルダからのコピーを含む)、または変更が加わると自動的にOnになるので、次回はOffのものは対象外となる。

こうすればわざわざA.lzhと比較をする必要がなくなり、処理時間が短くなると思います。

コマンドラインからlzh形式で圧縮するなら、unlha32.dllと
http://www.vector.co.jp/soft/win95/util/se028209.html
を組み合わせると便利です。DOS版lha.exeと同じ感覚でunlha32.dllを利用できます。古いソフトですが、Windows2000でも使えます。

投稿日時 - 2006-09-06 11:22:38

補足

定期的に行いたいので、その都度dirコマンドを使って出来るリストファイルを度整形するのは面倒ですね。

投稿日時 - 2006-09-06 13:31:36

ANo.1

1)A.LZHの内容をテンポラリファイルに書き出し
2)ディレクトリの内容をテンポラリファイルに書き出し
3)二つのテンポラリファイルのファイル名部分を抜き出す
4)ソートする
5)ファイル比較して差分をテンポラリファイルに書き出し
6)差分テンポラリファイルを整形してLHAのコマンド列として認識できる形にする
7)LHAをaオプションで起動して圧縮

LHAとDOS標準コマンドだけでもバッチファイルが組めそうです。grepがあれば便利でしょう。

投稿日時 - 2006-09-06 10:49:32

あなたにオススメの質問