揮発性のメモ2

知識をメモ書きしておく

右クリックメニューでパス名をコピーする 3

エクスプローラ上でファイルを複数選択し、右クリックメニューから「送る」で ファイル名の一覧をクリップボードに設定してくれるバッチファイル。 超便利。

@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に流す方法をとった。