[小ネタ]パスを取得するバッチファイル
開発者はパスを欲しがる
例えば
- ライブラリのパスを設定するとき
- コンパイラの検索パスを設定するとき
- SDK のパスを設定するとき
などなど
こんな時、エクスプローラからパスをコピーして、ファイル名をコピーして、とかやりますよね。
正直、メンドイ
右クリック SendTo に、パスをクリップボードに入れてくれるアプリがあればいいのに!
作りました
そもそもは Delphi で作って長年使ってました。
でも、よくよく考えたらバッチファイルでできんじゃね!?
となって、バッチファイルで作ってみました。
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
なんか複雑に見えるけど、複雑なのはショートカットの実体を取り出すところで、そんな事しなくて良いのなら、もっと単純になります。
set /p<NUL="%~f0" | clip
上記のどちらかのバッチファイルを SendTo に作ります。
(SendTo はデフォルトであれば C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\SendTo\ )
すると
こんな感じで登録されて、クリックするとクリップボードにパスがコピーされる仕組みです。
なお、バッチファイルは別の場所に保存しておいて、ショートカットを SendTo に入れればアイコンや名前を変更できます。
うーん、便利。
解説
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"
if /i "%~x1"==".lnk" (for /f "delims=" %%f in ('type "%~f1" ^| find "\" ^| find "."') do explorer "%%~dpf") else explorer "%%~dp1"
これを SendTo に登録しておくと、ショートカットのフォルダを開いてくれます!これまた便利!
まとめ
Bash が来ようという時代に、バッチファイルの記事を書いた。
追記
キーボードに手を伸ばすのが面倒でなければ、Shift + 右クリックで「パスのコピー」ができるとのご指摘!
そういえばあったけど、Windows95 の時代から SendTo に登録してたので忘れてた…。
ご指摘ありがとうございます。
Author And Source
この問題について([小ネタ]パスを取得するバッチファイル), 我々は、より多くの情報をここで見つけました https://qiita.com/pik/items/83ad2d4d2c5bfb92b957著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .