エクスプローラ上でファイルを複数選択し、右クリックメニューから「送る」で ファイル名の一覧をクリップボードに設定してくれるバッチファイル。 超便利。
@echo off set "LIST=%TEMP%\tempfilelist.txt" del "%LIST%" 2>nul :LOOP if "%~1" == "" goto LOOPEND REM ファイルは %~nx1 REM フルパスは %~dpnx1 echo %~nx1>> "%LIST%" shift goto LOOP :LOOPEND sort "%LIST%" | clip del "%LIST%" 2>nul
右クリックメニューでパス名をコピーする 2 - 揮発性のメモ2
から、スペース含みや括弧、びっくりマークの入ったファイル名にも対応するように修正をした。
for文でのループは格好いいけど、 () の含まれた要素が出てくるとエラーで死ぬので ファイル名が対象のときには forは使用できない。
blog.cles.jp
のように遅延展開を使用する手もあるが、そうすると今度は びっくりマーク ! が消滅してしまう不具合が発生する。
よって、for文ではなく if goto でぐるぐる回る方法を使う。
blog.systemjp.net
また、ループを () で囲って出力をパイプで clip に流したかったが、ファイル名の順序がなんだか適当だったので、ソートするために仮ファイルに出力してからclipに流す方法をとった。