読者です 読者をやめる 読者になる 読者になる

PPx RAR書庫ファイルはRar.exeで解凍するスクリプト

RAR5を解凍したかったので、RARはWinRAR5.00のRar.exeで解凍するように。

KC_main = {
U    ,*pptray /c *script %0s\unpack.js,"%a8FCN",%"unpack.js展開先""%!'u'"
}
==unpack.js==
//!*script
// 引数1:レスポンスファイル(%a8FCN)
// 引数2:出力先
if(PPx.Arguments.Length!=2){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 = '';

// メッセージの表示
function linemessage(message){
	PPx.Execute('*execute C,*linemessage '+message+'');
}
function logwindow(message){
	PPx.Execute('*execute C,*logwindow '+message+'');
}

// 終了時のチェック
function check(exitcode){
	// 強制終了された場合はスクリプトの実行を止める
	if(exitcode<0||exitcode==255){
		linemessage('unpack.js 強制終了'+exitcode);
		failedFiles.push('強制終了: '+file);
		quit();
	}
	// エラーコードを吐いた場合は記録する
	if(exitcode>0){
		failedFiles.push('展開失敗: '+file);
	}
}

// 実行
var fso		= new ActiveXObject('Scripting.FileSystemObject');
var wsh		= new ActiveXObject('WScript.Shell');
var sevenz	= '"C:\\Program Files\\7-Zip\\7z.exe"';
var rarexe	= '"C:\\Program Files\\WinRAR\\Rar.exe"';
var command	= '';
var rtnCode	= 0;
var arg1	= PPx.Arguments.Item(1);
var extractDir	= '';
var tempDir	= '';
var failedFiles	= new Array();

// *makedir
if(arg1.match(/^[a-zA-Z]:\\.+$/)){
	PPx.Execute("*makedir "+arg1)
}

// 実行ループ
for(i=0;i<FileCount;i++){
	file = files[i];
        tempDir = fso.BuildPath(arg1, fso.GetTempName());
	fso.CreateFolder(tempDir)
	extractDir = tempDir+'\\'+PPx.Extract('%*name(XNP,"'+file+'")')
	linemessage( (FileCount-i)+'/'+FileCount+' '+file )
	if(PPx.Extract('%*name(TN,"'+file+'")')=='rar'){
		command = (rarexe
				+ ' x'
				+ ' "' + file + '"'
				+ ' "' + extractDir + '"'
		);
		rtnCode = wsh.run(command,7,true);
		check(rtnCode);
	}else{
		command = (sevenz
				+ ' x'
				+ ' "./' + file + '"'
				+ ' -o"' + extractDir + '"'
		);
		rtnCode = wsh.run(command,7,true);
		check(rtnCode);
	}
	PPx.Execute('*chopdir '+extractDir);
	PPx.Execute('*chopdir '+tempDir);
	if(fso.FolderExists(tempDir)){
		failedFiles.push('同名フォルダがあります: '+file);
	}
}
linemessage('解凍終了しました');
quit();

// 終了
function quit(){
// エラーがあればログウィンドウに表示 if(failedFiles.length>0){ for(i=0;i<failedFiles.length;i++){ logwindow(failedFiles[i]); } } fso = ''; wsh = ''; // 終了後、展開先フォルダ表示 PPx.Execute("*ppc "+arg1) PPx.Quit(); }