【コラム】

日本語で10行プログラミング

89 フォルダ一括圧縮

 

89/90

なでしこ開発日誌~落ち着く場所はありますか?

人それぞれ、落ち着く場所があると思います。お風呂に入ると落ち着くとか、行きつけのカフェだったりすると思います。

私の場合は、それがトイレです。なぜかトイレに居るとすごく落ち着くので、よくノートパソコンを持ち込んで、仕事をしていたりします。とても滑稽なのですが、不思議と仕事が捗るのです。

ですので、プログラムや原稿を書いていて行き詰ると、用もなく(いや、その間に用は足すのですが…)トイレに篭ることになります。特に我が家のトイレは快適なのですが、トイレという閉鎖された空間が、子供の頃に憧れていた「秘密基地」のように思えてしまうからかもしれません。

皆さんの落ち着く場所はどこでしょうか。もし、変わった場所があれば、ぜひ、教えてくださいね。

フォルダ一括圧縮プログラムを作る

いきなり、出だしから変な話をしてしまいましてすみません。(気を取り直して…)今回は、フォルダ一括圧縮を行うプログラムを作ってみたいと思います。

皆さんは、パソコンのどこにどんなデータを保存していますか。人それぞれ使い方があると思いますが、だいたいは、データや仕事の分野ごとにフォルダに分けて管理しているのではないでしょうか。

私も、仕事の分野ごとにフォルダを分けて管理しています。そこで、これをバックアップするために、フォルダごとにデータを圧縮するというプログラムを作ってみようと思います。

プログラムのイメージとしては、それぞれ圧縮したいフォルダがあるフォルダの1つ上のフォルダ(マイドキュメントなど様々なフォルダがそれぞれ保存されている場所)を指定すると、それ以下にあるフォルダを次々と圧縮して、外付けのハードディスクなどに、バックアップするプログラムです。

フォルダ一括圧縮の手順

今回のプログラムは、とにかく、指定のフォルダ以下のフォルダを1つずつ圧縮していくというものなのです。

ここで、今回作るプログラムの手順をまとめてみたいと思います。一番簡単に書くと以下の動作をさせたいと思います。

・指定したフォルダ以下にあるフォルダを圧縮する

この一行を実際のプログラムに直すためには、もう少し細かい点を考えなければなりません。もう少し細かくプログラムに直すことを考えて手順にすると次のようになります。

(1)指定フォルダ以下のフォルダを列挙する
(2)列挙したフォルダについて以下の動作を繰り返し行う
(3)圧縮先のファイル名を作る
(4)実際にフォルダを圧縮する

フォルダを列挙して次々と処理する

先ほど考えた手順を実際のプログラムに直すためには、フォルダを列挙する方法と、列挙したフォルダを次々と処理する方法を知っていなくてはなりません。

なでしこで、フォルダを列挙して、次々と処理するには、以下のように書きます。

「指定フォルダ」のフォルダ列挙して反復
  ※ここに処理する内容
  ※ここに処理する内容
  ※ここに処理する内容…

フォルダを列挙するには、「フォルダ列挙」命令を使い、列挙したフォルダを順に処理していくには、「反復」構文を使います。要するに、上の書式を雛形としてプログラムを書けば良いのです。

とりあえず、列挙したフォルダを表示するだけのプログラムを書くと、以下のようになります。

マイドキュメントのフォルダ列挙して反復
  対象を表示。

ファイル・フォルダを圧縮する方法

次に、なでしこで、ファイルやフォルダを圧縮・解凍する方法ですが、これはとても簡単です。それは「xxをxxに圧縮」や「xxをxxに解凍」と書きます。つまり、見たままに書くことができます。これが日本語プログラミング言語の威力です!

圧縮するには、以下のように書きます。例えば、マイドキュメント以下全ての内容を、デスクトップ上の「バックアップ.lzh」へ圧縮したい場合は、以下のように書きます。

「{マイドキュメント}」を「{デスクトップ}バックアップ.lzh」へ圧縮。

ZIP圧縮を使うには?

なでしこを使う場合、圧縮するには、LZH形式・ZIP形式・CAB形式を選ぶことができます。ただし、ZIP形式やCAB形式で圧縮したい場合は、圧縮を行うためのアーカイバDLLをダウンロードする必要があります。

ZIP圧縮を行うためのDLLは、「7-zip.dll」で、以下のサイトからダウンロードできます。

7-zip32.dll ... ZIP形式の圧縮解凍DLL

また、CAB圧縮のためには、以下の「cab32.dll」のDLLをダウンロードします。

cab32.dll ... CAB形式の圧縮解凍DLL

実は、LZH形式の圧縮を使うには「UNLHA32.DLL」が必要になるのですが、これは、作者の方の許可を得て、はじめからなでしこの中に梱包されているので、LZH形式の圧縮の場合には、ダウンロードが不要です。

また、各保存形式を変える方法ですが、このためには、特に意識することなく、「xxから『ファイル名.lzh』へ圧縮」と書くと、LZH形式で圧縮され、「xxから『ファイル名.cab』へ圧縮」と書くと、CAB形式で圧縮されることになります。

10行プログラム

さて、こうして作ったプログラムは以下のようになります。

【使い方】

以下のプログラムを実行すると、まず、一括圧縮したいフォルダを尋ねられますので指定します。続いて、圧縮ファイルを保存するフォルダを尋ねられますので指定します。すると、圧縮するように指定したフォルダの中に入っているフォルダを1つずつ圧縮していきます。

圧縮したいフォルダを指定します。

フォルダを1つずつ圧縮します。

【なでしこのプログラム】

「圧縮したいフォルダを選択してください」と言う。#1
フォルダ選択して、選択フォルダに代入。もし、それが空ならば、終わり。#2
「圧縮ファイルを保存するフォルダを選択してください」と言う。#3
フォルダ選択して、保存フォルダに代入。もし、それが空ならば、終わり。#4
選択フォルダのフォルダ列挙して反復#5
  対象フォルダ=選択フォルダ&対象。#6
  保存名=「{保存フォルダ}{対象}.lzh」。#7
  母艦のタイトルは、「圧縮中:{対象}」。#8
  対象フォルダを保存名に圧縮。#9
「完了!」と言って、終わり。#10

1~2行目では、圧縮対象となるフォルダをユーザーに尋ねます。3~4行目では、保存先のフォルダをユーザーに尋ねています。

5行目で、フォルダを列挙して6~9行目を繰り返すように指定します。7行目以降では、圧縮対象となるフォルダのパス名と、保存対象となるフォルダのパス名を決めてから実際に圧縮します。 10行目では、完了の旨を表示してプログラムを終了します。

改造のヒント

こうしたバックアップのプログラムは、定期的に実行します。今回作った10行プログラムでは、毎回ユーザーに圧縮対象フォルダと、保存先フォルダを尋ねていますが、これでは、利便性がよくありません。そこで、それぞれのフォルダを保存する機能をつければ、毎回フォルダを指定することなく、実行することができます。

また、フォルダの中には、圧縮したくないフォルダもあるでしょう。そこで、除外リストなどを用意して、指定のフォルダは圧縮対象から外すなどの処理ができると、より実用的だと思います。

ぜひ、自分の使いやすいように、改造してみてください。

89/90

インデックス

連載目次
第90回 10行プログラミング最終回~10行プログラミングを振り返って
第89回 フォルダ一括圧縮
第88回 テキストエディタに貼り付けたExcelの表を見やすく整形する
第87回 一発加算電卓
第86回 ブログにHTMLソースを貼れるよう変換する
第85回 カード式メモ帳
第84回 時間電卓を作る
第83回 アスキーアート地図エディタ
第82回 縦書き風テキスト作成ツール
第81回 Excelシートの比較を行う
第80回 ノルマ計算機
第79回 高速バックアップ
第78回 単語帳に読み上げ機能をつける
第77回 ホームページのバックアップツール
第76回 英単語帳を作成する(その2)
第75回 英単語帳を作成する(その1)
第74回 メモリカード挿入でデータをコピーするツール
第73回 モールス信号ソフトの作成
第72回 フォトCDランチャーを作る
第71回 残暑見舞い作成ツールを作る
第70回 画面キャプチャプログラムを作る
第69回 様々なルールに対応するビンゴシートのプログラムを作る
第68回 ビンゴカードを作る
第67回 ビンゴマシンを作る
第66回 パスワードマネージャの作成
第65回 アンドゥ機能をつける
第64回 テキストの比較ツール~FCフロントエンド
第63回 システム情報クリップ
第62回 飲み会電卓を作る
第61回 バイナリエディタの作成
第60回 メールフッタ作成ツール(その2)
第59回 メールフッタ作成ツール(その1)
第58回 プロセス監視ツールを作成する
第57回 TODOメモを作る
第56回 携帯電話をテキストリーダーに使う(2)
第55回 携帯電話をテキストリーダーに使う(1)
第54回 「オープンソースカンファレンス2006 Tokyo/Spring」に参加しました
第53回 10行でチャットソフトを作る(2)
第52回 10行でチャットソフトを作る(1)
第51回 プレゼンタイマーを作る
第50回 カラーピッカーを作る
第49回 簡単な暗号作成プログラム
第48回 お手軽データベース「SQLite」を使う
第47回 CUI(コマンドライン)環境を拡張する
第46回 デスクトップ画像を記録するプログラム
第45回 市外局番で住所を調べる検索プログラム
第44回 コマンドライン型ランチャーを作る
第43回 文字数カウンタを作る
第42回 日本語でバッチ処理
第41回 イベントドリブンと電光掲示板
第40回 なでしこでWindowsの「送る」メニューを使いやすくする
第39回 同人音楽即売会M3に参加して思ったこと
第38回 画像のサムネイル作成
第37回 なでしことExcelで行事予定カレンダーを作ろう
第36回 なでしことExcelで月間カレンダーを作ろう!
第35回 なでしことExcelで年間カレンダーを作ろう
第34回 急な電話にも安心、意外と便利な「手書きメモ」
第33回 携帯電話のアドレスデータを取り出す
第32回 記念日カウンターを作る
第31回 顔文字入力支援ソフト
第30回 アスキーアートのためのエディタ
第29回 HTTPサーバーを作る
第28回 手紙のあいさつ文を作成するプログラム
第27回 ギターコードの構成音を表示
第26回 音楽の再生スピードを変える
第25回 ミニスライドショーを作る
第24回 撮影日で写真を振り分け
第23回 PSP用テキスト画像の作成
第22回 金種計算
第21回 パスワードを自動生成
第20回 携帯メールでWEBを更新する
第19回 時間の使い方を反省するプログラム
第18回 ウェブを画像でキャプチャ
第17回 ラーメンタイマーを作る
第16回 画像のトリミングツール
第15回 ごみの分別カレンダー
第14回 デスクトップ検索ツール
第13回 フォント見本帳
第12回 セピア調の画像ビューワー
第11回 健康チェック
第10回 10行で壁紙にらくがきする
第9回 WEBサイトの更新チェッカー
第8回 WEBページのリンク切れをチェック その2
第7回 WEBページのリンク切れをチェック
第6回 音楽ファイルの整理 - メディアタグから自動フォルダ分類
第5回 請求書の自動作成・印刷~Word連携技
第4回 重要データのバックアップ術
第3回 10行ニュースリーダーを作ろう!
第2回 なでしことは その2
第1回 なでしことは? その1

もっと見る

人気記事

一覧

新着記事