選択されたファイルを個別に圧縮するX-Finderスクリプト 2011-04-17 (Sun) 00:54

以前に、選択されたファイルをまとめて1つのアーカイブに圧縮するスクリプトを書いたが、選択されたファイルを個別に圧縮する必要に迫られ、そのスクリプトに少々手を加えて個別に圧縮(zip or 7z)するスクリプトを書いてみた。

以前のスクリプトでは圧縮に7za.exeを使っていたが今回は7z.exeを使うことにした。
(この辺の経緯はこちら → ファイル解凍 - X-Finderスクリプト
また、序でに圧縮先のフォルダを指定できるようにしてみた。

尚、圧縮ファイル名は対象ファイル名を元に自動的に決定される。決定されたファイル名が既に存在していたら追番を付けて作成する。
ex) test.txt → test.zip (圧縮先フォルダに同名ファイルが存在していたら test (1).zip)

◎使用方法
1.下記スクリプトをX-Finderのscriptフォルダに保存する
指定先に個別圧縮.js
var oSh = new ActiveXObject("WScript.Shell");
var oFs = new ActiveXObject("Scripting.FileSystemObject");
var cSel = WScript.Col(WScript.Env('Selected'));
var sExt = '.' + WScript.Env('Arg1');
var sPgpath = '"' + WScript.Env('Arg2') + '"';
var sPrm = WScript.Env('Arg3');
var sOut = WScript.Env('Arg4');

oSh.CurrentDirectory = oFs.GetParentFolderName(cSel.Item(0));
oSh.CurrentDirectory = oFs.GetFolder(sOut).Path;
for(var i = j = 0, sBnam, sName; i < cSel.Count; i++){
sBnam = oFs.GetBaseName(cSel.Item(i));
sName = sBnam + sExt;
for(j = 1 ; true ; j++){
if(oFs.FileExists(sName))
sName = sBnam + ' (' + j.toString(10) + ')' + sExt;
else
break;
}
oSh.Run(sPgpath + ' a "' + sName + '" "' + cSel.Item(i) + '" ' + sPrm, 7, true);
}



2011/05/24 修正
当スクリプト実行中にタブを切替えたりX-Finderからフォーカスが外れたりした場合にそれ以降の圧縮ファイルがX-Finderのインストールフォルダに作成されてしまう問題修正。(詳細はコメント欄参照)

var oSh = new ActiveXObject("WScript.Shell");
var oFs = new ActiveXObject("Scripting.FileSystemObject");
var cSel = WScript.Col(WScript.Env('Selected'));
var sExt = '.' + WScript.Env('Arg1');
var sPgpath = '"' + WScript.Env('Arg2') + '"';
var sPrm = WScript.Env('Arg3');
var sOut = WScript.Env('Arg4');

oSh.CurrentDirectory = oFs.GetParentFolderName(cSel.Item(0));
var sOpath = oFs.GetFolder(sOut).Path + '\\';
for(var i = j = 0, sBnam, sName; i < cSel.Count; i++){
sBnam = oFs.GetBaseName(cSel.Item(i));
sName = sOpath + sBnam + sExt;
for(j = 1 ; true ; j++){
if(oFs.FileExists(sName))
sName = sOpath + sBnam + ' (' + j.toString(10) + ')' + sExt;
else
break;
}
oSh.Run(sPgpath + ' a "' + sName + '" "' + cSel.Item(i) + '" ' + sPrm, 7, true);
}

2.スクリプトを呼び出すランチャを作成する。
スクリプトを呼び出す際に環境変数を介して以下のパラメタを渡す必要がある。
Arg1 : 圧縮形式 ex) zip or 7z
Arg2 : 7z.exeのパス ex) D:\Tools\7z\7z.exe
Arg3 : 圧縮パラメタ(7z.exeのスイッチ。7z.exeのマニュアル参照) ex) -mx=5 -y -scsWIN
Arg4 : 圧縮先フォルダ ex) .\ : カレント %Other% : 反対側

ex1) 圧縮するファイルと同じフォルダにZip個別圧縮
パス
Set:Arg1=zip
Set:Arg2=D:\Tools\7z\7z.exe
Set:Arg3=-mx=5 -y -scsWIN
Set:Arg4=.\
Include:JScript 指定先に個別圧縮.js

ex2) 反対側のパス(タブ)に7z個別圧縮
パス
Set:Arg1=7z
Set:Arg2=D:\Tools\7z\7z.exe
Set:Arg3=-mx=5 -y -scsWIN
Set:Arg4=%Other%
Include:JScript 指定先に個別圧縮.js

3.作成したランチャを実行する

以上。
関連記事

コメントの投稿

管理者にだけ表示を許可する

  1. No title
    はじめまして。
    7zの情報を探しているうちにここのスクリプトを見つけて
    便利に使わせていただいてます。


    1つ質問なのですが、
    このスクリプトをバックグラウンドで動かすようなことは可能でしょうか?


    10個くらいの大きなフォルダを圧縮しようとして
    時間がかかるのでその間に別の作業をしていたら
    書庫ができていなかったということがありました。


    調べてみた所、圧縮作業中に他のタブに移動したりX-Finderからアクティブが外れると
    それ以降、圧縮後に書庫がファイルとして保存されないようです
    (コマンドプロンプトの窓は出るので圧縮はされてるみたいなんですが・・・)


    X-Finderは最新プレビュー版
    スクリプトは7z.exeのところを7za.exeに変えた以外は記事の通りにしています。
    出力先をカレント(.\)にしているせいかなと思って特定のフォルダにしてみても駄目でした。
  2. No title
    続けてすいません。


    >それ以降、圧縮後に書庫がファイルとして保存されないようです
    >(コマンドプロンプトの窓は出るので圧縮はされてるみたいなんですが・・・)
    ないないと思っていた書庫ファイルですが
    X-Finderのインストールフォルダに作られていました。


    どうもスクリプト実行後に、カレントフォルダから移動したり別ウィンドウに移ると
    それ以降に圧縮を開始した書庫ファイルは全てインストールフォルダに作られるみたいです。


    お騒がせしてすいませんでした(^ ^;)
  3. Re: No title
    > 続けてすいません。
    >
    >
    > >それ以降、圧縮後に書庫がファイルとして保存されないようです
    > >(コマンドプロンプトの窓は出るので圧縮はされてるみたいなんですが・・・)
    > ないないと思っていた書庫ファイルですが
    > X-Finderのインストールフォルダに作られていました。
    >
    >
    > どうもスクリプト実行後に、カレントフォルダから移動したり別ウィンドウに移ると
    > それ以降に圧縮を開始した書庫ファイルは全てインストールフォルダに作られるみたいです。
    >
    >
    > お騒がせしてすいませんでした(^ ^;)

    カニタさん、はじめまして。
    ご指摘どおりの問題が起こることを確認しました。全く気付きませんでした(T_T)
    X-Finderからフォーカスが外れただけで圧縮ファイルが指定位置に作成されないのはまずいですよね。(^^;)

    このスクリプトの仕組みとして圧縮ファイルを作成しようとするフォルダをカレントフォルダに設定し、7z.exeを使用してそのフォルダに相対パスでファイルを圧縮するようになっているのですが、タブを切替えたり、X-Finderのフォーカスが外れたりすると何故かカレントフォルダがX-Finderのインストールフォルダに変更されてしまうようです。(そういうものなのかな?)そのためそれ以降のファイルがX-Finderのインストールフォルダに作成されていたようです。

    そこで圧縮ファイルの作成方法をちょっと変更して、絶対パスでファイルを圧縮するようにしてみました。
    こちらで試してみたところでは上手く動いているようなので記事の方を修正しておきました。
    修正した方をお試しください。よろしくお願いします。<(_ _)>
  4. No title
    修正ありがとうございます!ヽ(゚∀゚)ノ


    うちの環境でもちゃんと指定位置に書庫ができるのを確認しました。
    おかげさまで圧縮中に別の作業がどしどし捗ります。
    昨日の今日なのにホントにありがとうございましたm(_ _)m
注意事項
基本的にこのブログはブログ主の備忘録です。

ブログの内容にはブログ主の主観や時には正確でない情報が含まれていることもあります。書いてある内容がすべての環境にあてはまることを保証するものでもありません。

また、過去の記事は現時点で既に陳腐化していることもあります。

その辺をご理解の上で当ブログ内に書いてあることを試す場合は自己責任でお願いします。

記事内容の誤りの指摘、疑問点の回答などコメント頂けると助かります。
カレンダー
08 | 2017/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
ブログ内検索
カラーコードチェッカ
カラーコードの確認
入力例) #ffffff | blue
カテゴリ
最新記事
最新コメント
最新トラックバック
リンク
ブロとも申請フォーム

この人とブロともになる

メールフォーム

名前:
メール:
件名:
本文: