shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Windows】選択したファイル名の一覧をクリップボードにコピーする方法

Windowsでファイル名をリスト化し、文章内等に貼り付ける作業が面倒に感じることはありませんか? Windowsには標準で「選択したファイルの一覧を作成」する方法がありますが、これだとフルパス(例: C:\Users\...)が含まれ、ダブルクォーテーションも付くため、扱いにくいことがあります。
参考:Windows11で選択したファイルの一覧を作成する方法 - shikumika’s diary

今回は、選択したファイル名の一覧のみをクリップボードにコピーし、そのまま必要な場所に貼り付けて業務を効率化する方法の備忘録です。

数分の設定で、右クリックから簡単にファイル名の一覧を簡単に取得できるようになりました。

内容:

確認したwindowsはWindows11 24H2です。

設定方法と手順

この方法は、Windowsに標準で備わっている『コマンドプロンプト』と呼ばれるツールで動くバッチスクリプトを利用します。コマンドプロンプトは、黒い画面に文字を入力して命令を実行するためのもので、Windowsを操作する裏側の仕組みにアクセスできるツールと考えると分かりやすいかもしれません。

1.バッチファイル(BATファイル)を作成する

(1)メモ帳を開く

Windows「メモ帳」アプリを開き、新しいテキストファイルを作成します。

(2)バッチファイルのコードを貼り付け

以下のコードをコピーし、メモ帳に貼り付けます。
コードの内容は、ページ下部の「(参考)コードの補足説明」に記載しています。

@echo off
setlocal enabledelayedexpansion

:: ファイル名のリストを変数に格納
set "fileList="

for %%F in (%*) do (
    set "fileList=!fileList!%%~nxF^&echo."
)

:: 変数の内容をクリップボードにコピー
echo !fileList! | clip

:: メッセージを表示
echo 選択したファイルの名前一覧がクリップボードにコピーされました。

:: 一時停止
pause

下図は、Windows「メモ帳」にコードを貼り付け後のイメージです。

コピーしたコードを貼り付けしています

Windows「メモ帳」にコードを貼り付け後
(3)ファイルをバッチ形式で保存

以下の手順で保存します。

①ファイル名: ファイル名は任意ですが、○○.bat とします。保存場所も任意です。
 例:選択したファイル一覧の取得.bat

②ファイルの種類: 「すべてのファイル」に設定します。

③エンコード: ANSIを選択します(日本語に対応するため)。

下図は、保存時の画面イメージです。

拡張子のbat、すべてのファイル、エンコードをANSI形式としています

バッチ形式で保存の設定イメージ

保存をすると、次のような「バッチ形式のファイルのアイコン」になります。

歯車のようなアイコンで表示されます

「バッチ形式のファイルのアイコン」

2.「送る」メニューに登録

上記で作成したバッチファイルのショートカットを「送る」メニューに登録します。

これにより、右クリックで選択したファイルについて「送る」機能で処理ができます。

「送る」メニューへの登録方法は、以下を参考に「SendTo」フォルダにショートカット(もしくは、バッチファイル本体)を配置します。

shikumika.org

なお、下図はバッチファイルのショートカットを「SendTo」フォルダに保存した状態の事例です。

「SendTo」フォルダに保存されています

バッチファイルのショートカットを「SendTo」フォルダに保存した状態の事例

3.使い方

複数のファイルを選択し、右クリックして「送る」から作成したバッチファイルを選びます。

これにより、ファイルの情報がバッチファイルに引き渡され、選択したファイル名の一覧がクリップボードにコピーされます。

コピーされたファイル名の一覧は、Excelやメール、ドキュメントなどに貼り付けて活用できます。

具体的な動作イメージ

下図は複数のファイルを選択後、右クリックで「送る」の表示例です。追加した「選択したファイル一覧の取得.bat-ショートカット」のメニューが表示されているので、クリックします。

ショートカットを保存した「選択したファイル一覧の取得」のメニューがあります

複数のファイルを選択し、右クリックして「送る」の表示例

上記の結果、次の画面(コマンドプロンプトの画面)が表示されます。

クリップボードにコピーが完了のメッセージと、「続行するには何かキーを押してください...」と表示されています。何かキーを押すと、この画面は閉じます。

作成したバッチファイルの動作把握用で、このような画面を表示させています。

クリップボードにコピーが完了のメッセージ等が表示されています。

コマンドプロンプトの画面

これで、クリップボードにファイル名の一覧がコピーされているので、必要な個所に貼り付けします。

下図は、メモ帳に貼り付けをした結果です。

ファイル名の一覧が貼り付けされています。

メモ帳への貼り付け例

上記画面のとおり、選択したファイル名の一覧のみが取得できています。

(参考)コードの補足説明

(1)冒頭の設定部分

@echo off
setlocal enabledelayedexpansion

  • @echo off: コマンドそのものが画面に表示されるのを防ぎ、見た目をスッキリさせます。これを使うことで、結果や出力だけが表示されるようになります。
  • setlocal enabledelayedexpansion: 遅延環境変数の展開を有効化します。これは、ループや条件分岐の中で、変数の最新の値を参照したい場合に必要です(この事例では、「!fileList!」で使用)。これがない場合、ループ内で変数の更新内容が反映されず、期待通りに動作しません。
(2)ファイル名をリスト化するための変数初期化

set "fileList="

  • set "fileList=": ファイル名のリストを保持するための変数fileListを初期化しています(空にします)。
(3) ループ処理でファイル名を変数に追加

for %%F in (%*) do (
    set "fileList=!fileList!%%~nxF^&echo."
)

  • for %%F in (%*) do: コマンドライン引数として渡されたすべてのファイル(%*)に対してループを行います。
  • %%~nxF: ループ内で、各ファイルの「名前と拡張子」を取得します。

    ループ変数(ここでは %%F)に対して次のように取得できます。

    ~n: ファイル名部分(拡張子を除いた部分)を抽出

    ~x: ファイルの拡張子部分を抽出

    ~nx: ファイル名 (~n) と拡張子 (~x) の両方を組み合わせたものを取得

  • set "fileList=!fileList!%%~nxF^&echo.":
    fileList変数に、取得したファイル名(%%~nxF)を追加します。
    文字列(echo.の改行)を連結する形で複数のファイル名を一つにまとめます。
    !fileList!: 遅延展開を使って、更新されたfileListの内容を取得します。
(4)クリップボードにコピー

echo !fileList! | clip

  • echo !fileList!: 結合したファイル名のリストを画面に表示します。
  • | clip: パイプ(|)を使い、表示した内容をWindowsのクリップボードに送ります。これにより、ファイル名のリストがクリップボードにコピーされます。
(5)ユーザーメッセージの表示

echo 選択したファイルの名前一覧がクリップボードにコピーされました。
pause

メッセージの表示と、コマンドプロンプトがすぐに閉じないように、一時停止して操作結果を確認できるようにしています。

目的に応じて、削除も可です。

 

以上、選択したファイル名の一覧をクリップボードにコピーする方法でした。