- 締切済み
差分のLZHファイルの作り方
win2000のDOSコマンドから実行する方法を模索しています。 指定するディレクトリの中身全部を圧縮するとき、別の場所に作ってある「A.LZH」と比較して差分ファイルだけを「B.LZH」の名前で圧縮するという方法はありませんか? つまり、これから圧縮しようとするファイルに対し「A.LZH」の中に無い物だけを「B.LZH」として圧縮したいのです。 差分のバイナリファイルを作るフリーウェアが存在するようなのですが、どうしても差分のLZHを作りたいので。 通常はLHMeltを使っています。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- x1va
- ベストアンサー率26% (802/3006)
#2です。追記。 何らかのバックアップソフトを利用して定期的にバックアップをしている場合、バックアップ済みのファイルは全てアーカイブ属性がOffになってしまうので、この手は使えません。
- x1va
- ベストアンサー率26% (802/3006)
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でも使えます。
- sittaka-kun
- ベストアンサー率22% (153/686)
1)A.LZHの内容をテンポラリファイルに書き出し 2)ディレクトリの内容をテンポラリファイルに書き出し 3)二つのテンポラリファイルのファイル名部分を抜き出す 4)ソートする 5)ファイル比較して差分をテンポラリファイルに書き出し 6)差分テンポラリファイルを整形してLHAのコマンド列として認識できる形にする 7)LHAをaオプションで起動して圧縮 LHAとDOS標準コマンドだけでもバッチファイルが組めそうです。grepがあれば便利でしょう。
補足
定期的に行いたいので、その都度dirコマンドを使って出来るリストファイルを度整形するのは面倒ですね。