Windowsのエクスプローラーで開いているパスを
コピー&ペーストして目的のディレクトリまで行く
と言うことが多々あります。
プログラムを書いている際も、
テスト的にフルパスをコードに直接書く事もよくあり、
この場合、Windowsの「\」文字区切りだとまずい場合がほとんどで、
「\\」と二重にするか、Unixでの「/」に書き換えたりする必要があり、
とにかくめんどくさい。
と言うことで、
Windowsのエクスプローラーでファイルを選択して右クリックして、
以下のようなパスをコピーするメニューを追加しました。

やることは2つ
1.メニューを追加
2.メニューが選択された際に実行されるプログラムを用意
1.メニューを追加
Windowsの右クリックメニューはレジストリで管理されているので
レジストリに追加する必要があります。
レジストリエディタで追加する場合は、
スタートメニューを起動し、「regedit」と打ち込んでレジストリエディタを起動。
「HKEY_CLASSES_ROOT\*\shell」まで行き
1.「shell」を選択して「右クリック->新規->キー」で、キーを追加(名前は何でもいい)

2.追加したキーの中にある「(規定)」と言うのをダブルクリックし、
出てきたダイアログの「値のデータ」に「UNCパスコピー」と入れてOK
これが右クリックした際に出てくるメニュー名になります。

3.1で追加したキーを右クリックし、1と同じ事をして新たにキーを追加。
ここで追加したキーの名前は「command」にしてください。
追加したキーの中にある「(規定)」と言うのをダブルクリックし、
出てきたダイアログの「値のデータ」に実行するコマンドを書きます。

今回、Pythonで書いたプログラムが実行されるようにしており、
「python "J:/python/winPathCopy.py" %1 UNC -dir」
と言うコマンドを入力。
「winPathCopy.py」は、パスをクリップボードにコピーするPythonScriptです。
「%1」には、エクスプローラーで選択しているファイルかディレクトリのフルパスがきます。
その後ろの、「UNC」や「-dir」は「winPathCopy.py」で用意したてきとうなフラグです。
■winPathCopy.pyの中身
# -*- coding: shift-jis -*-
import sys
import os.path
#***********************************************************
## clipboadへコピー
#***********************************************************
def copyToClipboad( msStr ):
import subprocess
try:
p = subprocess.Popen(['clip'], stdin=subprocess.PIPE)
p.stdin.write(msStr )
p.stdin.close()
retcode = p.wait()
return True
except OSError:
return False
except ValueError:
return False
return True
if __name__=='__main__':
if len(sys.argv)==3:
sys.exit()
file_path = sys.argv[1]
mode = sys.argv[2]
if mode=='UNIX':
file_path = file_path.replace('\\','/')
path = file_path
if len(sys.argv)==4:
if sys.argv[3]=='-dir':
path = os.path.dirname(file_path)
copyToClipboad(path)
■レジストリへの登録がめんどくさい
いちいち手でレジストリに登録するのも面倒なので
reg ファイルを用意しておくと、色んなマシンで実行して使えますと。
Windows Registry Editor Version 5.00 ;==============================================; ;UNCパスコピー作成 ;============================================== [HKEY_CLASSES_ROOT\*\shell\unc_path] [HKEY_CLASSES_ROOT\*\shell\unc_path] @="UNCパスコピー" [HKEY_CLASSES_ROOT\*\shell\unc_path\command] [HKEY_CLASSES_ROOT\*\shell\unc_path\command] @="python \"J:/python/winPathCopy.py\" %1 UNC -dir"
;============================================== ; UNCファイルパスコピー作成 ;============================================== [HKEY_CLASSES_ROOT\*\shell\unc_file_path] [HKEY_CLASSES_ROOT\*\shell\unc_file_path] @="UNCファイルパスコピー" [HKEY_CLASSES_ROOT\*\shell\unc_file_path\command] [HKEY_CLASSES_ROOT\*\shell\unc_file_path\command] @="python \"J:/python/winPathCopy.py\" %1 UNC"
;============================================== ; UNIXパスコピー作成 ;============================================== [HKEY_CLASSES_ROOT\*\shell\unix_path] [HKEY_CLASSES_ROOT\*\shell\unix_path] @="UNIXパスコピー" [HKEY_CLASSES_ROOT\*\shell\unix_path\command] [HKEY_CLASSES_ROOT\*\shell\unix_path\command] @="python \"J:/python/winPathCopy.py\" %1 UNIX -dir"
;============================================== ; UNIXファイルパスコピー作成 ;============================================== [HKEY_CLASSES_ROOT\*\shell\unix_file_path] [HKEY_CLASSES_ROOT\*\shell\unix_file_path] @="UNIXファイルパスコピー" [HKEY_CLASSES_ROOT\*\shell\unix_file_path\command] [HKEY_CLASSES_ROOT\*\shell\unix_file_path\command] @="python \"J:/python/winPathCopy.py\" %1 UNIX"
0 件のコメント:
コメントを投稿