わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

Re: ディレクトリ移動

エクスプローラー拡張またはエクスプローラー代替の,良いソフトウェアを探しています.Windows 7 Professional 64bitで動作し,

  • タブ表示
  • タブ間のファイルコピー/移動
  • フォルダーのお気に入り
  • フォルダー名のコピー*1
  • 白いところを右クリックでフォルダーのプロパティを出せること

あたりの機能が最低限必要です.また,エクスプローラー代替の場合,フォルダ名ダブルクリックでそのアプリケーションが起動できるのがベストなのですが,まあ,(デスクトップ上などのフォルダーを)右クリックしてメニューから選べるか,そのアプリケーションを起動しておいてドラッグ&ドロップで開くことができれば,よしとしましょう.
エクスプローラー拡張で,上の機能をすべて実現しているのは,QTTabBarですが,あいにくWindows 7に非対応です.
エクスプローラー代替として,まめFile5,X-Finderを使っていますが,いずれも決定打には至っておりません.
ともあれ,「フォルダー名のコピー」ができないと,シェルでディレクトリを移るのも手間になるので,少し調べてみました.
右クリックのメニューで,コピーできるようになるというソフトウェアを,いろいろ試しましたが,何ともうまくいきません.そんな中,以下の情報を発見しました.

Windows VistaコマンドプロンプトWindows XPのそれと異なり、ファイルやフォルダーをドラッグ&ドロップして、ファイルのパス名を入力することができなくなった。その場合は、新たに追加された“パスとしてコピー”機能を利用することになる。

この機能はWindows Vistaの全エディション(Home Basic、Home Premium、Business、Enterprise、Ultimate)でお使いいただけます。

Vistaコマンドプロンプトでは、ファイルやフォルダーのドラッグ&ドロップにより、パス名を入力できなくなった。そんな時は、新しく搭載された“パスとしてコピー”機能を使って入力する。
エクスプローラー上などで、Shiftキーを押しながらファイルやフォルダを右クリックすると、右クリックメニューに“パスとしてコピー”という項目が表示される。これを選択すると、絶対パスクリップボードにコピーされるので、コマンドプロンプトに貼りつければいい。

ASCII.jp:“パスとしてコピー”でコマンドプロンプトにパス名を渡す|ここが変わったWindows Vista 100連発!

試してみると…Windows 7でも,出ました.
それでは,シェルとの連携ができるか,確認しましょう.zshを起動して,別名定義していたcdcを実行…あ? 「cd: no such file or directory: "C:/Users/takehikom/Desktop/abc"」と出て,失敗しました.
まめFile5の「フルパスでコピー」をしてからのcdcは,成功します.cdcってそもそも何だっけ…

$ which cdc
cdc: aliased to cd "$(getclip)"

(Shift+右クリックでデスクトップ上のフォルダーabcを「パスとしてコピー」)
$ getclip
"C:\Users\takehikom\Desktop\abc"%

(まめFile5でデスクトップ上のフォルダーabcを「フルパスでコピー」)
$ getclip
C:\Users\takehikom\Desktop\abc%

日記は:ディレクトリ移動,リンクURL取得 - わさっき
getclipの出力の末尾の「%」は,getclipコマンドの出力ではなく,zshが,改行なしでコマンドが終わりましたよというのを示すためにつけている記号です.
ともあれ,違いは明瞭です.まめFile5にせよ,Vista&QTTabBarにせよ,パスをコピーしたときには,ダブルクォーテーションマークがつけていませんが,Shift+右クリックの場合には,ダブルクォーテーションマークもつけて,クリップボードに入るということですね.
では,ダブルクォーテーションマークを削りますか.Windowsのパス名にダブルクォーテーションマークは使えないので,単純に全削除で問題ないでしょう…

(Shift+右クリックでデスクトップ上のフォルダーabcを「パスとしてコピー」)
$ getclip | sed -e s/\"//g
C:\Users\takehikom\Desktop\abc%

(まめFile5でデスクトップ上のフォルダーabcを「フルパスでコピー」)
$ getclip | sed -e s/\"//g
C:\Users\takehikom\Desktop\abc%

どちらも同じになりました.では,aliasを変更してみます.

$ alias cdc='cd "$(getclip|sed -e s/\\\"//g)"'

これでcdcコマンドで,どちらの方法でコピーした場合も,動作確認OKです.
ただし,(フォルダーではなく)ファイル名のパスをコピーした場合でもディレクトリ移動ができるようにしたい*2ので,cdcはaliasよりもfunctionとして定義する方がよさそうです.暇なときに書くとします.
ちなみに本日のエントリで「エクスプローラー」「フォルダー」と書いているのは,Windows 7上の悩みだというのを意識した記述です.通常は,末尾の「ー」は取り除く派です.

*1:フォルダーそのものをコピーして,別のところで「貼り付け」を選べばフォルダーがコピーできる,というのではなく,フォルダー名の文字列を,クリップボードに入れるという機能です.

*2:「白いところ」をShift+右クリックでは,「パスとしてコピー」が出ません.そこでかわりに,そのフォルダー上のファイルを左クリックしてから,Shift+右クリックしようと考えたわけです.フォルダー上にファイルがなかったら…しょうがないので,一つ階層を上がりますか.