ラベル 7zip の投稿を表示しています。 すべての投稿を表示
ラベル 7zip の投稿を表示しています。 すべての投稿を表示

2022年2月1日火曜日

7-Zipモード

展開、圧縮に7-Zipを使う。 以下をScriptフォルダに保存。

wrap_7z.js

//!*script
// 7-zipを利用して展開/圧縮/個別圧縮を行う
// 第一引数: オプション u:展開 p:圧縮 ip:個別圧縮
// 第二引数: レスポンスファイル
// 第三引数: 処理先フォルダ
//
// コマンド例
// 展開:*script %0\Script\wrap_7z.js,u,%a*8FCDN,%2
// 圧縮:*script %0\Script\wrap_7z.js,p,%a*8FCDN,%*input("%2%*addchar(\)|%*extract(C"%%X")|.zip" -title:"7zipで圧縮" -select:i)

// 個別圧縮:*script %0\Script\wrap_7z.js,ip,%a*8FCDN,%2

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

//  7z.exeのパス
//var Exec = "C:\\Program Files\\7-Zip\\7z.exe";
var Exec = PPx.Extract('%\'7z\'');

var option = PPx.Arguments.Item(0);
var responseFile = PPx.Arguments.Item(1);
var outputFolder = PPx.Arguments.Item(2);

var fso = PPx.CreateObject("Scripting.FileSystemObject");
var archiveList = GetList(responseFile);
var parentFolder = fso.GetParentFolderName(archiveList[0]);

if (option == "u") {
  // 展開
  for (x in archiveList){
    if (archiveList[x] == ""){
      break;}
    PPx.Execute('%OBsq '+Exec+' x -o\"'+outputFolder+'\\*\" \"'+archiveList[x]+'\"');
  }
} else if (option == "p") {
  // 圧縮
  var sorceFiles = "";
  for (x in archiveList){
    if (archiveList[x] == ""){
      break;}
    sorceFiles += '\"' + fso.GetFileName(archiveList[x]) + "\" "
    }
  PPx.Execute('*cd '+parentFolder+' %: %OBsq '+Exec+' a \"'+outputFolder+'\" '+sorceFiles);
} else if (option == "ip") {
  // 個別圧縮
  // フォルダの時は入れ子構造を避けるパターン。
  for (x in archiveList){
    if (archiveList[x] == ""){
      break;}
    var fullpath=PPx.Extract('%*name(CDN,\"'+archiveList[x]+'\",\"%1\")');
    if(PPx.GetFileInformation(fullpath)==":DIR"){
      PPx.Execute('*cd \"'+fullpath+'\" %: '+Exec+' a \"'+outputFolder+'\\'+fso.GetBaseName(archiveList[x])+'.zip\" *');
    } else {
      PPx.Execute('%OBsq '+Exec+' a \"'+outputFolder+'\\'+fso.GetBaseName(archiveList[x])+'.zip\" \"'+archiveList[x]+'\"');
    }
  }
  // フォルダでも入れ子構造を避けないパターン
  /*
  for (x in archiveList){
    if (archiveList[x] == ""){
      break;}
    PPx.Execute(Exec+' a \"'+outputFolder+'\\'+fso.GetBaseName(archiveList[x])+'.zip\" \"'+archiveList[x]+'\"');
  }
   */
}

// レスポンスファイルからファイル名のリストを作成
function GetList(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;
}

以前は、個別、圧縮、個別圧縮とそれぞれ違うスクリプトを用いていたが、それを統合した。 以下を編集して取込。

A_exec	= {
7z	= "C:\Program Files\7-Zip\7z.exe"
}

KC_main = {
F1	,*mapkey use,K_7zipmode %: *linemessage 7-Zip MODE: Press H for HELP
}

K_7zipmode	= {
U	,*script %0\Script\wrap_7z.js,u,%a*8FCDN,%2
P	,*script %0\Script\wrap_7z.js,p,%a*8FCDN,%*input("%2%*addchar(\)|%*extract(C"%%X")|.zip" -title:"7zipで圧縮" -select:i)
I	,*script %0\Script\wrap_7z.js,ip,%a*8FCDN,%2
\U ,*setcust _User:sorce_id=%n %: *ppc -r -bootid:x -single "%1" -k %(*mapkey use,K_subwin %: *linemessage 展開先を選択してください %: *string i,temp_exec=%(*script %0\Script\wrap_7z.js,u,%*extract(%su"sorce_id""%%a*8FCDN"),%1 %: %K"@Q"%)%)
\P ,*setcust _User:sorce_id=%n %: *ppc -r -bootid:x -single "%1" -k %(*mapkey use,K_subwin %: *linemessage 圧縮先を選択してください %: *string i,temp_exec=%(*script %0\Script\wrap_7z.js,p,%*extract(%su"sorce_id""%%a*8FCDN"),%*input("%1%*addchar(\)|%*extract(C"%%X")|.zip" -title:"7zipで圧縮" -select:i) %: %K"@Q"%)%)
\I ,*setcust _User:sorce_id=%n %: *ppc -r -bootid:x -single "%1" -k %(*mapkey use,K_subwin %: *linemessage 展開先を選択してください %: *string i,temp_exec=%(*script %0\Script\wrap_7z.js,ip,%*extract(%su"sorce_id""%%a*8FCDN"),%1 %: %K"@Q"%)%)
ESC	, *mapkey delete,K_7zipmode %: *linemessage 7-Zip MODE END
H	, %"7-Zip mode"%I"U%bt:展開%bnP%bt:圧縮%bnI%bt:個別圧縮%bn\U%bt:サブ窓で展開%bn\P%bt:サブ窓で圧縮%bn\I%bt:サブ窓で個別圧縮%bnESC%bt:モード終了"
}

K_subwin	= {
\ENTER    ,*execute ,%si"temp_exec"
}

F1を押すと7-Zipモードになり、一時的にキーバインドが

  • U: 7-Zipで展開
  • P: 7-Zipで圧縮
  • I: 7-Zipで個別圧縮
  • \U: サブ窓を使って7-Zipで展開
  • \P: サブ窓を使って7-Zipで圧縮
  • \I: サブ窓を使って7-Zipで個別圧縮
  • H: ヘルプ表示
  • Esc: モード終了

となる。

2022年1月30日日曜日

7-Zipで圧縮形式を変換

1.書庫を一時ディレクトリに解凍

2.解凍したものを圧縮

するだけ。


A_exec	= {
7z	= "C:\Program Files\7-Zip\7z.exe"
}

_Command	= {	; ユーザコマンド・関数
convert	= *string o,folder="%*temp(%X,d)"
	*string o,fname=%*name(CD,"%*input("%X.zip" -select:es)","%1")
	%OBsq %'7z' x %FCD -o%so"folder"
	*cd %so"folder"
	%'7z' a %so"fname" *
}

2021年1月17日日曜日

7-zip(7z.exe)で普通の圧縮

以前、7-zipを使って個別圧縮をできるようにした。
今回は、ファイルやフォルダをまとめて一つのアーカイブファイルにする、普通の圧縮を7-zipでできるようにする。

例えばマークファイルをカレントフォルダに圧縮したい場合は、以下のコマンドを実行する。

*script %0\Script\7z_unpack.js,%a*8FCDN,%1%*addchar(\)%{hoge%|.zip%} 

7z_unpack.js

//!*script
// 7-zipを実行してレスポンスファイルに記載されたファイルを圧縮する
// 第一引数: レスポンスファイル
// 第二引数: 出力ファイルのパス

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

//  7z.exeのパス
var Exec = "C:\\Program Files\\7-Zip\\7z.exe";
var responseFile = PPx.Arguments.Item(0);
var destFile = PPx.Arguments.Item(1);
var sorceFiles = "";
var fso = PPx.CreateObject("Scripting.FileSystemObject");

var archiveFiles = GetList(responseFile);
var parentFolder = fso.GetParentFolderName(archiveFiles[0]);

for (x in archiveFiles){
  if (archiveFiles[x] == ""){
    break;}
  sorceFiles += fso.GetFileName(archiveFiles[x]) + " "
}
//  作業ディレクトリを変更したあと7-zipで圧縮
PPx.Execute('*cd '+parentFolder+' %: \"'+Exec+'\" a \"'+destFile+'\" '+sorceFiles);

// レスポンスファイルからファイル名のリストを作成
function GetList(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;
}

2021年1月8日金曜日

7-zip(7z.exe)で個別圧縮

ファイルやフォルダをまとめて一つに圧縮するのではなく、ファイルごと、フォルダごとに個別圧縮する。7zipを使用。

例えばマークファイルをカレントフォルダに個別圧縮したい場合は、以下のコマンドを実行する。

*script %0\Script\wrap_7z_a.js,%a*8FCDN,%1

wrap_7zip_a.js

//!*script
// 7-zipを実行して圧縮先フォルダにアーカイブファイルを圧縮する
// 第一引数: レスポンスファイル
// 第二引数: 圧縮先フォルダ

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

//  7z.exeのパス
var Exec = "C:\\Program Files\\7-Zip\\7z.exe";
var responseFile = PPx.Arguments.Item(0);
var extractFolder = PPx.Arguments.Item(1);
var fso = PPx.CreateObject("Scripting.FileSystemObject");

var archiveFiles = GetList(responseFile);
// 個々のファイルごとに7-Zipで圧縮
for (x in archiveFiles){
  if (archiveFiles[x] == ""){
    break;}
  PPx.Execute('\"'+Exec+'\" a \"'+extractFolder+'\\'+fso.GetBaseName(archiveFiles[x])+'.zip\" \"'+archiveFiles[x]+'\"');
}

// レスポンスファイルからファイル名のリストを作成
function GetList(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;
}