TreePaste

コピーしたファイルをフォルダー構成ごと貼り付けできる Windows ツールです。 ツリーで階層を選んで、任意のレベルからペーストを実行できます。

概要

TreePaste は、エクスプローラーでコピーしたファイル・フォルダーを、元のフォルダー構成を保ったまま貼り付けるためのデスクトップアプリです。 単純な一括貼り付けではなく、コピー元の階層をツリー表示し、どの階層から貼り付けるかを選択できます。

TreePaste のメイン画面。フォルダー階層の表示と貼り付け起点の選択画面

解決する課題

エクスプローラーの貼り付けで得られる結果は、実質的に 2 通りしかありません。 フォルダーをコピーすればそのフォルダー自体を含むサブツリー全体が貼り付けられ、 中のファイルをコピーすれば構造が失われたフラットなファイル群になります。 「構造は保ったまま、3 階層下から始めたい」という指定はできません。

たとえば、プロジェクトの階層深くに置かれた報告書を考えます。

D:\Projects\ClientA\2026\Reports\Q1\summary.xlsx
D:\Projects\ClientA\2026\Reports\Q1\appendix.xlsx
D:\Projects\ClientA\2026\Reports\Q2\summary.xlsx

ここで ReportsQ1 のフォルダーは残しつつ、 ProjectsClientA2026 は落として Reports\Q1\summary.xlsx の形で貼り付けたい場合、エクスプローラーでは一度の操作で実現できません。 通常はすべて貼り付けてから不要な親フォルダーを手作業で削除することになり、この工程でミスが起きます。

TreePaste はコピーした項目をツリーとして表示し、貼り付けの起点となる階層をクリックで指定できます。 Reports を選べば、貼り付け先には Reports\Q1\summary.xlsx が作られ、それより上の階層は破棄されます。

開発背景

複数のファイルやフォルダーを別の場所へ移す作業では、不要な親フォルダーまで含めて貼り付いてしまったり、逆に必要な構造が崩れてしまったりすることがあります。 TreePaste は、コピー元の構造を視覚的に確認しながら貼り付け起点を決められるようにすることで、こうした手戻りを減らすことを目的に開発しました。

設計方針として重視したのは、作業の流れを止めないことです。 ウィンドウを占有せずタスクトレイに常駐し、アイコンを探してクリックするのではなくグローバルショートカットで呼び出せるようにし、 貼り付け先はダイアログで選ばせるのではなく、すでに目の前で開いているエクスプローラーから推定するようにしました。

主な機能

使い方

  1. TreePaste を起動します(タスクトレイに常駐します)。
  2. エクスプローラーで貼り付けたいファイル・フォルダーをコピーします(Ctrl+C)。
  3. 貼り付け先フォルダーをエクスプローラーで開きます。
  4. Ctrl+Alt+V で TreePaste のウィンドウを表示します。
  5. 表示されたツリーから貼り付け起点の階層を選択します。
  6. 貼り付けを実行します。

手順 3 は見た目以上に重要です。貼り付け先は、ショートカットを押した時点で最前面にあるエクスプローラーウィンドウから読み取ります。 呼び出す前に目的のフォルダーを前面に出しておくことが、貼り付け先を正しく決めるための条件になります。

貼り付け先の検出方法

TreePaste は貼り付け先をユーザーに選ばせるのではなく、直前まで見ていたウィンドウから読み取ります。 検出は次の 3 段階で行っています。

  1. GetForegroundWindow で最前面のウィンドウを取得し、 GetWindowThreadProcessId でそのウィンドウを所有するプロセスを特定します。
  2. プロセスが explorer であれば、Shell.Application COM オブジェクト経由で開いているシェルウィンドウを列挙し、 HWND が最前面ウィンドウのハンドルと一致するものを探して、その LocationURL から表示中のフォルダーパスを取得します。
  3. 最前面がエクスプローラーではない場合、あるいはシェル側の検索で該当が得られなかった場合は、 デスクトップにフォールバックし、貼り付け先が常に有効になるようにします。

最初に見つかったシェルウィンドウを使うのではなく、ウィンドウハンドルの一致で絞り込んでいる点がポイントです。 これにより、エクスプローラーを複数開いている状況でも、貼り付け先が任意のウィンドウではなく、 実際にフォーカスのあったウィンドウに定まります。

動作上の注意点

動作環境

ソースからのビルド

.NET 10 SDK が導入されていれば、ソリューションをそのままビルドできます。

dotnet build src/TreePaste/TreePaste.slnx

実行可能な形にする場合は、win-x64 ランタイム向けに Release 構成で発行します。 出力は src/publish/win-x64/ 配下に書き出されます。

リポジトリ

ソースコードおよび利用方法の詳細は GitHub で公開しています。

GitHub リポジトリを見る - TreePaste