2013年5月22日水曜日

7-zip(7zG.exe)で書庫の展開

あいさつ


今まではLhaForge+fenrirで書庫の展開をしていた。

書庫にカーソルをあわせ、展開先のフォルダをfenrirで選択、コマンドで展開してLhaforgeの機能で展開先のフォルダを別窓で開くという仕方です。 ただこれだと現在窓に展開だとか複数の書庫の展開だとか細かいところで調整がきかないので、7-Zipとスクリプトでの展開に変えてみる。

解凍したい書庫にマークしてから、Shift+Uで解凍メニューを表示。展開先を選びます。

KC_main = { ; PPcメイン窓
\U ,%M_MyUnpack,1
}
M_MyUnpack = { ** comment **
現在窓に展開(&1) = *script %0\Script\wrap_7zG.js,"%a8FCDN","%1"
反対窓に展開(&2) = *script %0\Script\wrap_7zG.js,"%a8FCDN","%2"
反対窓のマークファイルを現在窓に展開(&3) = *script %0\Script\wrap_7zG.js,%*extract(~"%%a8FCDN"),"%1"
}

wrap_7zG.js
//!*script
// 7zG を実行して展開先フォルダにアーカイブファイルを展開する
// 第一引数: レスポンスファイル
// 第二引数: 展開先フォルダ

if (PPx.Arguments.Length < 2){
  PPx.SetPopLineMessage("引数が正しくありません。");
  PPx.Quit(-1);
}

var fs = PPx.CreateObject("Scripting.FileSystemObject");
//  7-Zipのパス
var exec = 'C:\\Program Files\\7-Zip\\7zG.exe';
var archiveFiles = GetArchiveFiles(fs, PPx.Arguments.Item(0));
var extractFolder = PPx.Arguments.Item(1);

// 個々のファイルごとに7-Zipで展開
for (x in archiveFiles){
  if (archiveFiles[x] == ""){
    break;}
  fn = archiveFiles[x];
  ExtractArchive(fs, fn, extractFolder);
}

// レスポンスファイルからファイル名のリストを作成
function GetArchiveFiles(fs, list)
{
  var f = CreateObject("ADODB.Stream");
  
  f.type = 2;
  f.charset = "UTF-8";
  f.open;
  f.LoadFromFile(list);
  text = f.readText(-1).split("\r\n");
  f.close;
  return text;
}

// フォルダを作成して展開
function ExtractArchive(fs, archiveFile, extractFolder)
{
  var foldername = extractFolder + '\\' + PPx.Extract('%*name(X,' + archiveFile + ')');
  var command = '%Obsq \"' + exec + '\"' + ' x ' + archiveFile + ' -o\"' + foldername + '\"';
  
  // フォルダを作成
  PPx.Execute('*makedir ' + foldername);
  // 7-Zipで解凍
  PPx.Execute(command);
  // 二重フォルダの場合は解消する
  PPx.Execute('*chopdir ' + foldername);
}

参考

0 件のコメント:

コメントを投稿