LoginSignup
5
4

More than 5 years have passed since last update.

[小ネタ]パスを取得するバッチファイル

Last updated at Posted at 2016-06-25

開発者はパスを欲しがる

例えば

  • ライブラリのパスを設定するとき
  • コンパイラの検索パスを設定するとき
  • SDK のパスを設定するとき

などなど

こんな時、エクスプローラからパスをコピーして、ファイル名をコピーして、とかやりますよね。
正直、メンドイ

右クリック SendTo に、パスをクリップボードに入れてくれるアプリがあればいいのに!

作りました

そもそもは Delphi で作って長年使ってました。
でも、よくよく考えたらバッチファイルでできんじゃね!?
となって、バッチファイルで作ってみました。

path2clip.bat
if /i "%~x1"==".lnk" (for /f "delims=" %%f in ('type "%~f1" ^| find "\" ^| find "."') do set /p<NUL="%%f" | clip) else set /p<NUL="%~f1" | clip

なんか複雑に見えるけど、複雑なのはショートカットの実体を取り出すところで、そんな事しなくて良いのなら、もっと単純になります。

path2clip.bat
 set /p<NUL="%~f0" | clip

上記のどちらかのバッチファイルを SendTo に作ります。

send.png

(SendTo はデフォルトであれば C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\SendTo\ )

すると

send2.png

こんな感じで登録されて、クリックするとクリップボードにパスがコピーされる仕組みです。

なお、バッチファイルは別の場所に保存しておいて、ショートカットを SendTo に入れればアイコンや名前を変更できます。

a.png

うーん、便利。

解説

clip

clip コマンドが全ての肝です。
clip コマンドはパイプかリダイレクトで受け取ったデータをクリップボードにコピーしてくれます。

ショートカットの実体探し

for /f %%var in (CMD) do コマンドを使うと、CMD の実行結果を %%var に入れてくれるという、どう考えてもクレイジーな仕様があり、それを使ってます。
また、.lnk ファイルの実体をちゃんと探すためには WSH を使う必要があったので、ここに載ってたズルイ方法(type で中身を出力して取得)でやってます。

改行無し出力

当初

echo "%~f1" | clip

としていました。

が!
コレだと改行コードが含まれてしまうのでした(パイプの前にある空白も)。

そこでググったところ set /p による技を発見

それを参考に、echo から set に置き換えました。
具体的な仕組みはリンク先のブログをご覧下さい!

おまけ

OpenPath.bat
if /i "%~x1"==".lnk" (for /f "delims=" %%f in ('type "%~f1" ^| find "\" ^| find "."') do explorer "%%~dpf") else explorer "%%~dp1"

これを SendTo に登録しておくと、ショートカットのフォルダを開いてくれます!これまた便利!

まとめ

Bash が来ようという時代に、バッチファイルの記事を書いた。

追記

キーボードに手を伸ばすのが面倒でなければ、Shift + 右クリックで「パスのコピー」ができるとのご指摘!
そういえばあったけど、Windows95 の時代から SendTo に登録してたので忘れてた…。
ご指摘ありがとうございます。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4