今後コマンドプロンプトのバッチファイル作成をやっていくつもりならぜひ最初にこれを作っておいてください。
Topics
機能
ドラッグ&ドロップしたファイルの絶対パスを取得して、クリップボードに保存する
という機能を実行することができます。
使用シチュエーション
プログラミングをかじったことのある人であればご理解いただけると思うのですが、コマンドプロンプトに限らずコードを作成していく上で、ファイルの絶対パスを記載しなければいけない場面が何度も出てきて、都度調べるのが非常に面倒なんです。
そんな時、絶対パスを調べたいファイルをこのバッチファイルにドラッグ&ドロップするだけで、クリップボードに絶対パスがコピーされ、あとは絶対パスを記載したいところでペーストするだけ。便利でしょ?
今後コマンドプロンプト用のコードを作成していくにあたって、絶対パスをしらべるのに確実に時間を取られることになるので、まず一番最初にこのバッチファイルを作っておくことをお勧めします。
業務効率化のための業務を効率化しようとしているわけですね笑
もちろん、普段からプログラミングをする人にとっても便利だと思いますので、ぜひ活用してみてください。
バッチファイルの作成
スクリプト
@echo off
setlocal enabledelayedexpansion
REM ドラッグアンドドロップで渡されたファイルのフルパスを取得
set "file=%~1"
REM フルパスをクリップボードにコピー
echo !file!| clip
解説
@echo off
バッチファイルを起動すると、自動的のコマンドプロンプトのウィンドウが立ち上がって、バッチファイル内に記載されたコマンドが一つずつ実行されます。
その際、各コマンドがウィンドウに表示されるのですが、
このコマンドを最初に実行しておくと、その後のコマンドが表示されなくなるとのことです。
今回のように短いバッチファイルの場合は表示されても問題ないですが、処理の多いバッチファイルだとウィンドウに字が表示され続けるのが鬱陶しいのでこのコマンドを入れておくと良さそうですね。
setlocal enabledelayedexpansion
これは遅延環境変数の展開、と呼ばれるものです。
バッチファイルの特徴として、コードを読み込むときに変数を値に置き換える、というものがあるようでして、これがトリッキーな性質を持っています。
どういうことかというと、たとえば以下のようなコードがあったとします。
set example = SAMPLE
if "%sample%" == "SAMPLE" (
set sample = EXAMPLE
echo %sample%
)
これを実行するとEXAMPLEという文字が表示されると直感的に理解したくなると思いますが、
実際はSAMPLEという文字が表示されます。
何が起こっているかというと、先ほどのコマンドプロンプトの特徴である、コードを読み込むときに変数を値に置き換える、が関係しています。
IF文などはその中身まで含めて一つのコードという認識になります。
つまり、上記のコードで言うと、if文を読み込んだ時点でその中身の変数全てが一気に置き換えられことになります。
そのため、先ほどのコードを実行すると、実は以下のようなコードが実行されることになるわけです。
set example = SAMPLE
if "SAMPLE" == "SAMPLE" (
set SAMPLE = EXAMPLE
echo SAMPLE
)
これでは困ってしまいます。
そんなときに、コードを読み込むときではなく、それぞれの処理が実行されるときに変数を値に置き換えてくれるとうにするのが、
setlocal enabledelayedexpansion
というコマンドなわけですね。
これを書いておくと、1行ずつ順番に変数が値に置き換わっていきます。
バッチファイルではこのコマンドが必要になることが多いみたいなので、とりあえず入れておくといいかもしれませんね。
このコマンドを使う際は変数を呼び出すときに使用する%を!に置き換える必要があることに注意してください。
REM ドラッグアンドドロップで渡されたファイルのフルパスを取得
set "file=%~1"
%1だと””つきのフルパス、%~1だと””抜きのフルパスが取得されます。
私のスクリプトでは””抜きで取得するようにしました。
取得したフルパスをfileという変数名で保存しています。
REM フルパスをクリップボードにコピー
echo !file!| clip
クリップボードに指定の文字列をコピーしたい時は、
echo %文字列%| clip
というコマンドを実行することでクリップボードに文字列がコピーされますが、
今回は遅延環境変数を使用する内容になっているので%を!に置き換えて、
echo !文字列!| clip
とします。
今回はあらかじめ取得したファイルのフルパスをコピーしたいので、
変数のfileを呼び出しています。
バッチファイルの実行
さっそく作成したバッチファイルを実行してみましょう。
作成した.batのアイコンの上に、フルパスを取得したいファイルをドラッグ&ドロップしてみてください。
その次にメモ帳か何かを開いてペーストしてみましょう。
無事フルパスがペーストされたら成功です。
他のコードを作成する際にぜひ使ってみてください。