展開、圧縮に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: モード終了
となる。
0 件のコメント:
コメントを投稿