WSH(JScript)でファイルのパスをコピー

所属しているノンプロ研で

ファイル名込みでアドレスコピペしたいとき皆さんどうしてますか?

という質問があり、私はフルパスの取得はだいたいいつもShift + 右クリック→「パスをコピー」でやっていたのですが、 セラエノさんがなでしこでドラッグ&ドロップでパスをコピーできるアプリを作成していたので わたしも何か作れないかなーとWSHで作ってみました。

WSH(初挑戦!)はVBScriptJScriptの2種類で書けるのですが、 せっかく今GASを習っているのでJavascriptベースのJScriptで作ってみました。

コードはこちら(当初はメッセージを日本語にしてたのですが文字化けひどくなっちゃったので英語に…。) あと編集時文字コードUTF-8にしてたらコード動かなかったのでANSIで拡張子.jsで保存。。。

//ドラッグドロップしたファイル数を判定
var fileInput = WScript.Arguments.Count();
if (fileInput == 0){
    WScript.echo("There is no file. Please drag and drop.");
    WScript.Quit();
}
​
//あとで結果をクリップボードにコピーするときの関数
function setClip(text){
    var clip = WScript.CreateObject('WScript.Shell').Exec('clip');
    clip.StdIn.Write(text);
    clip.StdIn.Close();
    WScript.Sleep(50);
}
​
var filePathAll = []
//for文でまわしてファイルパスを配列に挿入
for (var i = 0; i < fileInput; i++){
    var filePath = WScript.Arguments.Item(i);
    if (fileInput == 1){
        filePathAll = filePathAll.concat(filePath);
    }else{
    filePathAll = filePathAll.concat(filePath + '\n')
    }
} 
​
var kekka = filePathAll.join('');
setClip(kekka);
WScript.echo('Copied ' + fileInput + ' fullpath to clipboard!!');
WScript.Quit();
参考にさせていただいたサイト

Wscript.Argumentsからファイル名を取得するJScript:WSH・Windows Script Hostの使い方

WSH JScriptを使いこなそう 〜ファイル&フォルダ操作〜

JavaScript - JavaScriptでWSHを使いたい|teratail

↑たしかにUTF-8で動かなかった

JScriptでクリップボード - クジラ机ブログ

↑いろいろ調べてみるとIEやMSOfficeを使ってクリップボードを扱うのが主流のようですが WScript.CreateObject('WScript.Shell').Exec('clip');でいけた。

うちの会社はセキュリティが厳しく、なかなかソフトをインストールできないので Windowsであればとりあえず動くWSH極めたらいろいろ便利そうだなと思いました。。。 が、、いにしえの遺物っぽいので、将来性は微妙かもな😿