The Nameless City

何故か製薬やSAS関連のブログ、の予定。

Windowsのレジストリを弄ることでメニューを作る。

最近もまたWindowsでSAS9.4TS1M2とかインストールしてんだけど。
うっかりUnicodeでの構成とかをデフォルトにした御蔭でちと面倒なことに。
f:id:houyhnhm:20160127164735p:plain
拡張子「.sas」に関連付けて幾つかメニューが作られるんだけど(この画像は既に仕込んだ後なんだけど)、バッチ実行をする際にあるメニュー

  • SAS9.4でバッチサブミット
  • SAS9.4(UTF-8)でバッチサブミット

どちらで実行してもUTF-8モードで動いてしまうようになった。


ので、急遽、「SAS9.4(S-JIS)でバッチサブミット」というメニューを作った。

レジストリエディタを起動して設定する。

まあ、個人端末なので簡単とは言え、この領域はアプリインストール出来る人、まあAdministratorsに所属してないと多分いじってはいけないけど。
いけないんだけど、そんなに怯えることはないです。レジストリエディタでレジストリいじる時には、必ず最初に元のレジストリをエディタからエクスポートしておいたら、最悪元に戻せる。
特にこれからいじる箇所は、そう他のアプリに影響することはない。

HKEY_CLASSES_ROOT

この下に、拡張子の設定、ファイルの設定色々が混じっている。.sasの場合、以下のようになっている。
f:id:houyhnhm:20160127165738p:plain
「.sasの場合には、既定のSAS.Program.701を見てね」ということなので、この.sasの下ではないSAS.Program.701を見る。f:id:houyhnhm:20160127170331p:plain
このSAS.Program.701の下にshellという枝が見えると思う。その下に、右クリックメニューで設定するような内容がある。
例えば、Batch940という枝は、
f:id:houyhnhm:20160127170522p:plain
f:id:houyhnhm:20160127170625p:plain
こういう構成になっている。
Batch940とかの名称はまあ重複しないようにして、何らかの新しいメニューを追加することが出来る訳です。
commandの内容は、
「"C:\Program Files\SASHome\SASFoundation\9.4\sas.exe" "%1" -nologo -config "C:\Program Files\SASHome\SASFoundation\9.4\SASV9.CFG"」
になっていて、Unicodeで構成するようにすると、ここのCFGの内容が、

-config "C:\Program Files\SASHome\SASFoundation\9.4\nls\u8\sasv9.cfg"

になってて、UTF-8の設定を見るようになってるのね(ちなみにここバージョンやOSによって設定のやり方が異なるので注意)。

ここをいじるのでも後先考えないなら別にいいけど、後でSASの構成変えたりする時にどうにかなるのも面倒なので、自分はメニューを追加した。

[HKEY_CLASSES_ROOT\SAS.Program.701\shell\Batch940SJIS]
@="SAS 9.4 (S-JIS) でバッチサブミット(&B)"

[HKEY_CLASSES_ROOT\SAS.Program.701\shell\Batch940SJIS\command]
@="\"C:\\Program Files\\SASHome\\SASFoundation\\9.4\\sas.exe\" \"%1\" -nologo -config \"C:\\Program Files\\SASHome\\SASFoundation\\9.4\\nls\\ja\\SASV9.CFG\""

余談だけど、ここでは文字は二重引用符で囲む。で、その中の特殊文字は\でエスケープしてます。

設定後は特に再起動とか必要ないので適当に試してみたらいいと思います。