標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

cd ショートカット.lnk

NYAGOS は cd ショートカット.lnk という書き方をサポートしている。

これは Go言語で実装した内蔵コマンドの cd で直接サポートしているわけではなくて、 nyagos.d\cdlnk.luaという Lua スクリプトcdエイリアスを書き、 その中で nyagos.create_object("WScript.Shell") で COM オブジェクトを生成、 それでショートカットの宛先を問い合わせている。

この「cd ショートカット.lnk」を便利に使うため、 自分は %USERPROFILE% の下に開発ソースフォルダーへのショートカットを多数作っている。

ショートカットは無論エクスプローラでも作れるが、いちいちマウスで操作するのも 面倒なので、lnk.js という JScript を書いている。具体的には下記のようなスクリプトになる。

if( WScript.Arguments.length == 1  ){
    var wshShell = new ActiveXObject("WScript.Shell");
    var lnkSrc = wshShell.CreateShortcut(WScript.Arguments.Unnamed(0));
    if( lnkSrc == null ){
        WScript.Echo("Fail to create ShortCut Object");
    } else {
        WScript.Echo( "    " + lnkSrc + "\n<-- " + lnkSrc.TargetPath ); 
    }
    WScript.Quit(1);
}

if( WScript.Arguments.length < 2 ){
    WScript.Echo(
        "Usage: cscript lnk.js FILENAME SHORTCUT {Option=Value}... make shortcut\n" +
        "       cscript lnk.js SHORTCUT          ... print shortcut-target")
    WScript.Quit(1);
}

var fsObj = new ActiveXObject("Scripting.FileSystemObject");
var src = fsObj.GetAbsolutePathName(WScript.Arguments.Item(0));
var dst = fsObj.GetAbsolutePathName(WScript.Arguments.Item(1));

if( fsObj.FolderExists(dst) ){
    dst = fsObj.BuildPath(dst,fsObj.GetFileName(src));
}
if( dst.length >= 4 && dst.substring(dst.length-4) != ".lnk" ){
    dst += ".lnk";
}
var wshShell=new ActiveXObject("WScript.Shell");
var shortcut1=wshShell.CreateShortcut(dst);

if( shortcut1 == null ){
    WScript.Echo("Fail to create ShortCut Object");
    WScript.Quit(1);
}
shortcut1.TargetPath=src;

if( WScript.Arguments.length >= 3 ){
    for(var i=2 ; i < WScript.Arguments.length ; i++ ){
        var equation = WScript.Arguments.Item(i);
        var pos = equation.indexOf("=",0);
        if( pos >= 0 ){
            equation="shortcut1." + equation.substring(0,pos) + "=\"" +
                    equation.substring(pos+1).replace(/\\/g,"\\\\") + "\"";
            WScript.Echo(equation);
            eval(equation);
        }else{
            WScript.Echo("Equal(=) not found: " + equation)
        }
    }
}
shortcut1.Save()
WScript.Echo("    " + src + "\n--> " + dst);
WScript.Quit(0)

こういうのを作っておくと、Visual Studio の開発フォルダーから

cd ~\PATH\TO\DEVELOP\FOLDER1
lnk.js . ~

とかできる。すると

cd FOLDER1.lnk

だけで深いフォルダーへ一気に移動できて、入力が楽になる

無論、mklink でも同様のことが可能だが、そうするとツールによっては見かけのパス構成が変わってしまって、いろいろ不都合がでる場合もある。こちらの方が手軽で有用ではないかと思われるが、いかがだろうか。