PPx マークアイテムを個別に圧縮するスクリプト

以前は上記のカスタマイズで個別圧縮してたのを、スクリプトで行うようにしました。

f:id:k9q:20131124170208p:plainf:id:k9q:20131124170210p:plain

M_xzip    = {	** comment **
zip(Lv&0)	= %u7-ZIP64.DLL,a -tzip -mx=0 %ef"%{%|%*name(DCPN,Z:\)%|%X.zip%}" %@ %S"-r"%:%k"^CTRL"
zip(Lv&5)	= %u7-ZIP64.DLL,a -tzip -mx=5 %ef"%{%|%*name(DCPN,Z:\)%|%X.zip%}" %@ %S"-r"%:%k"^CTRL"
rar(Lv&3)rr3%%	= winrar a -m3 -rr3p "%{%|%*name(DCPN,Z:\)%|%X.rar%}" %@*%FDC%:%k"^CTRL"
--	= 
個別圧縮 zip(Lv&1)	= *script %0s\pack.js,%a*8FDC,a -tzip -mx=1,zip,%"出力フォルダ"%{%|Z:\%|%}
個別圧縮 &7z(MAX)	= *script %0s\pack.js,%a*8FDC,a -t7z -mx=9,7z,%"出力フォルダ"%{%|Z:\%|%}
個別圧縮 &rar(MAX)rr3%%	= *script %0s\pack.js,%a*8FDC,a -ibck -m5 -rr3p,rar,%"出力フォルダ"%{%|Z:\%|%}
}
==pack.js==
//!*script
// 引数1:レスポンスファイル(%a*8FDC)
// 引数2:オプション
// 引数3:拡張子
// 引数4:出力先
if(PPx.Arguments.Length!=4){PPx.Quit();}

// レスポンスファイルを読み取り、配列へ格納
var file    = '';
var files	= new Array();
var str		= new ActiveXObject('ADODB.Stream');
var ResponseFile	= PPx.Arguments.Item(0);
str.type	= 2;
str.charset	= 'utf-8';
str.open();
str.loadFromFile(ResponseFile);
while(!str.EOS){
	file = str.readText('-2')
	files.push(file);
}
var FileCount = files.length;
str.close();
str = '';

// 実行するか尋ねる
if(PPx.Execute('%QY"圧縮対象数:'+FileCount+' 実行しますか?"')){
	PPx.Quit();
}

// 実行ループ
var wsh		= new ActiveXObject('WScript.Shell');
var sevenz	= '"C:\\Program Files\\7-Zip\\7z.exe"';
var rarexe	= '"C:\\Program Files\\WinRAR\\Rar.exe"';
var packname	= '';
var command	= '';
var rtnCode	= 0;
var option	= PPx.Arguments.Item(1);
var ext		= PPx.Arguments.Item(2);
var destDir	= PPx.Extract('%*name(DCNP,'+PPx.Arguments.Item(3)+')');
function check(exitcode){
	// 強制終了された場合はスクリプトの実行を止める
	if(exitcode<0||exitcode==255){
		PPx.Execute('*execute C,*linemessage pack.js 強制終了'+exitcode);
		wsh = '';
		PPx.Quit();
	}
	// エラーコードを吐いた場合はスクリプトの実行を止める
	if(exitcode==2){
		PPx.Execute('%I"エラー'+exitcode+' ディスクの空きがありません: '+(FileCount-i)+'/'+FileCount+' "'+packname+'""');
		wsh = '';
		PPx.Quit();
	}
	if(exitcode>0){
		PPx.Execute('%I"エラー'+exitcode+': '+(FileCount-i)+'/'+FileCount+' "'+packname+'""');
		wsh = '';
		PPx.Quit();
	}
}

// rarは事前に出力先フォルダを作成する
if(ext=='rar' && destDir.match(/^[a-zA-Z]:\\.+$/) ){
	PPx.Execute('*makedir '+destDir)
}
for (i=0;i<FileCount;i++) {
	file = files[i];
	packname = '"' + destDir + PPx.Extract('%*name(XN,'+file+')') + '.' + ext + '"';
	PPx.SetPopLineMessage((FileCount-i)+'/'+FileCount+' '+packname);
	if(ext=='rar'){
		command = (rarexe
				+ ' '
				+ option
				+ ' '
				+ packname
				+ ' '
				+ file
		);
		rtnCode = wsh.run(command,7,true);
		check(rtnCode);
	}else{
		command = (sevenz
				+ ' '
				+ option
				+ ' '
				+ packname
				+ ' '
				+ file
		);
		rtnCode = wsh.run(command,7,true);
		check(rtnCode);
	}
}
if(PPx.Extract('%*windowrect(C,l)')<0){	//PPcが最小化状態
	PPx.Execute('%I"'+ext+'圧縮終了しました"');
}
PPx.Execute('*execute C,*linemessage '+ext+'圧縮終了しました');

wsh = '';
PPx.Quit();