BAT:複数のファイル名をクリップボードへコピーする
仕事上でファイル名をいちいちコピーして貼り付ける作業がとてもめんどくさいのでBATを使い一括でコピーさせてみました。
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
if "%~1"=="" (
echo ファイルがありません。ファイルをドロップしてください。
pause
exit /b
)
set "clipboard=%cd%\clip.txt"
if exist "!clipboard!" del "!clipboard!" 2>nul
for %%c in (%*) do (
set "filename=%%~nxc"
echo !filename!>>"!clipboard!"
)
clip < !clipboard!
del !clipboard!
echo ファイル名をクリップボードにコピーしました!
endlocal
pause
解説
まず下記のブロックはファイルが存在するかのチェックになります。もし何もファイルがない状態で選択すると下記のようなメッセージを表示させてbatを終了させます。
if "%~1"=="" (
echo ファイルがありません。ファイルをドロップしてください。
pause
exit /b
)
次にファイルをクリップボードへコピーさせる方法ですが、テンポラリーファイルを作成してそれを.txtへ追記させて最終的にそのファイルの内容をclipboardへコピーさせるコードになります。
set "clipboard=%cd%\clip.txt"
if exist "!clipboard!" del "!clipboard!" 2>nul
for %%c in (%*) do (
set "filename=%%~nxc"
echo !filename!>>"!clipboard!"
)
clip < !clipboard!
del !clipboard!
echo ファイル名をクリップボードにコピーしました!
まず下記のコードはクリップボードのベースファイルの変数を作成します。clip.txtというファイルが存在した場合は削除する仕様になっています。というのもクリップボードのベースとなるファイルに何か記載されているとコピーの際に影響が出てしまうのでここでリセットしています。
set "clipboard=%cd%\clip.txt"
if exist "!clipboard!" del "!clipboard!" 2>nul
次にfor文を使い複数のファイルがドロップされた場合でも対応させるため(%*)と引数を設定します。%%~nxcで取得したファイル名+拡張子をfilename変数へ格納します。そしてfilenameへセットされた各行のファイル名を!clipboard!へ追記する仕組みになっています。もしclip.txtが存在しない場合はこの段階で新しくclip.txtを作成して%%~nxcの値がファイルへと追記されていく仕組みになります。
for %%c in (%*) do (
set "filename=%%~nxc"
echo !filename!>>"!clipboard!"
)
clip < !clipboard!
del !clipboard!
最後!clipboard!へ追記されたファイルをclip <とクリップボードへファイル内容を渡しています。delで最後clip.txtを削除して終わりです。
clip < clip.txt