- ベストアンサー
右クリックメニューからBATでファイル名をコピー
@echo off set T=%tmp%\tmp.txt type nul > %T% for %%f in (%*) do (echo %%~nxf >> %T%) type %T% | clip ファイル名が正常に取得できない
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
大変すみません、私が見た "%*" で動くという情報はガセネタだったようです。 レジストリで指定する時、%1のみ解釈され、%*は未定義となり何も渡されません。 複数選択時は、各ファイルごとに1つずつのインスタンスが生成されるため、すべてまとめてクリップボードへ、というのは仕様上できません。 (ただし、複数ファイルを受け取れる仕様に則ったプログラムであれば対応可能。CLSIDとCOMがキーワード?) 右クリックのカスタムメニュー以外の方法で、現状対応できるのは、右クリックからの「送る」、またはプログラム(もしくはそのショートカット)にドラッグアンドドロップでファイルを放り込む、のどちらかと思います。
その他の回答 (3)
- luka3
- ベストアンサー率72% (424/583)
最後の "%1" が原因です。 "%*" にしてください。
- luka3
- ベストアンサー率72% (424/583)
BATには問題ありません。 『BATをEXEにするプログラム』か、『右クリックメニューに登録するプログラム』のどちらかで引数を1つしか扱わないようになっていると思われます。 プロンプトで「explorer shell:sendto」を実行し、出てきたフォルダにこのBATを置きます。 複数ファイルを選択して右クリックし「送る」の中にあるBATを選べば、ファイル名がすべてクリップボードに入ることをご確認ください。
補足
送るの場合は問題ないようです。 BATをEXEにするプログラムはVisualBatです。 右クリックメニューに登録する方法は HKEY_CLASSES_ROOT\*\shell(右クリック)→新規→キー→キー名を英数字の適当な名前に変更 既定→値のデータ→右クリックメニューに表示する名前を設定する キー名(右クリック)→新規→キー→キー名をcommandに変更 command→既定→値のデータ→"プログラムのパス" "%1"
- luka3
- ベストアンサー率72% (424/583)
自分の環境だと動きます。 (右クリックメニューはSendToのことですよね?) もしかしてユーザー名にスペースが入ってます? その場合は、%T% を "%T%" にしてください。 あと確認(デバッグ)の仕方として、 ・1行目 @echo on にする ・最後に pause を入れる とすればコマンドが表示されるので、何が悪いか理解する手助けになるかと。
補足
使い方としてはBATをEXEにして右クリックメニューに登録して使う形です。 これだと4つのファイルをコピーしようとしても1つしかコピーできません。
補足
ECHO は <OFF> です。 となります。