◆ ショートカットのリンク先にはプログラムだけじゃなく引数も書ける
◆ ファイル・フォルダをドロップすると 最後に引数が追加されて実行できる
◆ cmd の /K か /C を使うと 「"」 で問題が出る
  ◆ 最初のコマンドをクオートかつドロップしたファイル名に半角スペースを含むとき
  ◆ 最初と最後にクオートがあると除去される
  ◆ 2 重クオートの必要があるけどドロップしたファイル名は自動
  ◆ 最後にクオートを追加できない

前の記事で bat はやめて とりあえず使う PC 全部に入ってる Node.js にしました
ただ Node.js にスクリプトファイルを指定した上で引数を渡すので exe 単体のようにドロップして実行はできません
なのでショートカット機能を使うことにしました

ショートカット

ショートカットはリンク先に引数ありのコマンドを指定できるので こういう設定ができます

cmd /K C:\data\programs\args.exe a b

args.exe は前と同じで単純に引数を 1 行ごとに表示するものです
このショートカットに test.txt をドロップしたらこう表示されます

C:\data\programs\args.exe
a
b
C:\Users\user1\Desktop\test.txt

ちゃんと渡せてます

クオートと半角スペース

あとは args.exe を Node.js の exe に置き換えて a b のところにスクリプトとオプションを指定します
そうすれば 最後にドロップしたフォルダの引数が入って期待した動きになります

動きはしたのですが 使っていると別の問題が見つかりました
Node.js の exe は半角スペースを含むフォルダ (Program Files) にあります
なのでクオートをつけてこうなります

cmd /K "C:\Program Files\nodejs\node.exe" C:\data\dev\test.js

ここにドロップするフォルダ名に半角スペースが入るとちゃんと動かなくなります

これは普通のコマンドプロンプトで

cmd /K "C:\Program Files\nodejs\node.exe" C:\data\dev\test.js "a b"

と書いても同じです
/K や /C オプションでは 最初と最後の " を除去するようです
除去しない場合もあるのですが 複雑な条件があって 今回のようにクオートが 2 セット以上あると除去されることになります

除去されるなら下のように 2 重にしておけば動きます

cmd /K ""C:\Program Files\nodejs\node.exe" C:\data\dev\test.js "a b""

しかし ショートカットの場合は最後の引数は自動で追加されるものなので最後に " をつけられません

やっぱり Windows のコマンド周りは不完全なものばかりなんですよね