この記事はTakumi Akashiro ひとり Advent Calendar 2020の7日目の記事です。
初心者向けにExtendScriptのことを書いてたら筆が止まって困ってるので、今週は更に小ネタ続きとなります。
始めに
- あるディレクトリの一部分だけ、別のボリューム(SSDとか)に置きたい。
- ファイルを保存するたびに管理者権限が必要で、UACで許可を出すのが面倒
読者のみなさまは、以上のような悩みを抱えたことはないでしょうか。
今日はこれを解決するかもしれないテクニックについて話します。
それはジャンクションです。
ジャンクションとは
とてもザックリ説明すると通常のファイルシステムであつかえるショートカットです。
あ、この説明、C言語の初心者向け解説で#include
をおまじないと呼ぶぐらいに雑なので話半分で聞いてくださいね。
まあ見てもらえればわかると思います。
ジャンクションは以下で作成できます。
mklink /j <dst> <src>
実践
試しに管理者権限が必要なProgramFilesの下からジャンクションを作ってみましょう。
D:\>if exist scripts (echo True) else (echo False)
False
D:\>if exist "scripts\Delete All Empty Layers.jsx" (echo True) else (echo False)
False
D:\>if exist "C:\Program Files\Adobe\Adobe Photoshop 2021\Presets\Scripts\Delete All Empty Layers.jsx" (echo True) else (echo False)
True
D:\>mklink /j scripts "C:\Program Files\Adobe\Adobe Photoshop 2021\Presets\Scripts"
D:\Scripts <<===>> C:\Program Files\Adobe\Adobe Photoshop 2021\Presets\Scripts のジャンクションが作成されました
D:\>if exist "scripts\Delete All Empty Layers.jsx" (echo True) else (echo False)
True
D:\>type nul > scripts/nanka.txt
アクセスが拒否されました。
ハイ出来ましたね!
いやいや、最後アクセス拒否されててダメじゃねーか!と思われている皆様もいると思います
そう、実はこれだけではだめなんです。
でも逆にProgramFiles側にジャンクションを張って権限のないフォルダをソースとして扱えば……!
C:\Windows\system32>robocopy "C:\Program Files\Adobe\Adobe Photoshop 2021\Presets\Scripts" "D:\Scripts" /s /e
rem 中略
C:\Windows\system32>rename "C:\Program Files\Adobe\Adobe Photoshop 2021\Presets\Scripts" "Scripts_bak"
C:\Windows\system32>mklink /j "C:\Program Files\Adobe\Adobe Photoshop 2021\Presets\Scripts" "D:\Scripts"
C:\Program Files\Adobe\Adobe Photoshop 2021\Presets\Scripts <<===>> D:\Scripts のジャンクションが作成されました
D:\>type nul > d:/scripts/foo.txt
D:\>if exist "scripts/foo.txt" (echo True) else (echo False)
True
D:\>if exist "C:\Program Files\Adobe\Adobe Photoshop 2021\Presets\Scripts\foo.txt" (echo True) else (echo False)
True
無事ファイルを作れてますね!
締め
ジャンクションを取り上げるにも関わらず、一つもFF8ネタを擦れなかった敗北感はありますが、まあいいです。
ジャンクションを 適切に つかおう!