「ファイル名を指定して実行」用のショートカットを右クリックメニューから作成する

#目次
[1.はじめに](#1.はじめに)
[2.使用イメージ](#2使用イメージ)
[3.ダウンロード](#3ダウンロード)
[4.インストール](#4インストール)
[5.使用方法](#5使用方法)
[6.アンインストール](#6アンインストール)
[7.スクリプトの解説](#7スクリプトの解説)
[8.おまけ](#8おまけ)

#1.はじめに
Windowsでは、PATHの通ったフォルダにショートカットを作成しておく事で、「ファイル名を指定して実行」からあらゆるリンク(フォルダ・ファイル・ウェブサイト)を呼び出すことが出来ます。
[参考：「ファイル名を指定して実行」を極める - Qiita](https://qiita.com/sta/items/4b70e6b130a1033dc2c5#%E4%BB%BB%E6%84%8F%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BB%BB%E6%84%8F%E5%90%8D%E3%81%A7%E9%96%8B%E3%81%91%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B)


自分の好きな名前でショートカット名を作成出来るので、フルパスを覚える必要がなくなり大変便利です。一方で、この為には以下の事前準備が必要です。
**1.ショートカットを作成**
**2.ショートカット名を指定**
**3.PATHの通ったフォルダに設置**

本記事では、右クリックメニューの「送る」からスクリプトを起動する事で、**1と3を省略**出来る様にしたいと思います。

#2.使用イメージ
以下の様な、少し深い階層にあるtest.txtのショートカットを作成して呼び出してみます。
![abc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610100/23e564a1-2060-11fd-e633-0db35d65bf58.png)

**右クリック⇒送る⇒neutrino**(スクリプトの名称です。お好みで変更可)を実行すると…
![neutrino.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610100/9f8789ce-05aa-01f7-dfe3-658d97f0573c.png)

ショートカット名を入力するウィンドウが出ます。入力してOKを押してください。
![test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610100/a5f5c0e2-a1a4-4de6-0fda-98a5435d2083.png)

これで、前述の1~3が実行されたことになります。早速起動してみましょう。
![runtest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610100/9810c4f7-b1e2-e21e-d4d8-032818355c14.png)

はい、無事起動出来ました。
![helloworld.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610100/f2b8a08a-2a05-d53d-48db-de20886c2c92.png)

#3.ダウンロード
GitHubに置いてあります。
[hilco0527/neutrino - GitHub](https://github.com/hilco0527/neutrino)

「Download ZIP」でファイルをダウンロードし、中身を全てデスクトップにコピーして下さい。
![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610100/2d0d3f31-9464-2b03-c647-67fba080bfeb.png)

![programs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610100/9b327d3f-3c56-9d09-b90e-e0fe0968092d.png)


#4.インストール
どこでも良いのでショートカットを保存しておくフォルダを作り、PATHを通してください。
[参考：「PATH を通す」の意味をできるだけわかりやすく説明する試み - Qiita](https://qiita.com/sta/items/63e1048025d1830d12fd#_reference-69d3e75e8e14e9c002e2)

**Setup.vbsを実行**するとフォルダ選択画面が開くので、作成したフォルダを選択してください。以下が実行されます。
1.選択したフォルダへのスクリプトの設置
2.右クリックメニュー用設定(「送る(sendto)」フォルダにスクリプトのショートカットを作成)
3.直接起動用設定(選択したフォルダにスクリプトのショートカットを作成)

完了後、**デスクトップにコピーしたファイルは削除**して問題ありません。

#5.使用方法
以下の起動方法が使用出来ます。
**1.右クリックメニュー⇒送る⇒neutrino**
**2.ファイル名を指定して実行⇒neu**

**1について**は前述「[2.使用イメージ](#2使用イメージ)」の通りです。**2について**は、インストール時の直接起動用設定により、「ファイル名を指定して実行」で「neu」を実行するとスクリプトが起動する様になっています。この場合、**クリップボードの内容を元にショートカットが作成されます**。ウェブサイトなどはこの方法でショートカットを作成可能です。

また以下の様に、**直接引数を与えることも可能**です。既に作成済みのショートカットに対し、さらに短い名称を指定する事も可能です。
![t.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610100/72ac6028-92d3-215b-7efa-31180b1032fb.png)

起動に使用する名称の変更は、インストール時の2と3で作成されるショートカットの名称を変更する事で可能です。「送る」フォルダは「shell:sendto」を実行すると開けます。

#6.アンインストール
以下を削除してください
1.インストール時に作成したフォルダ
2.PATHに設定した上記フォルダ
3.「送る」フォルダのショートカット(「shell:sendto」を実行すると開けます)

#7.スクリプトの解説
①ファイル操作に使用するオブジェクトの初期化。

```neutrino.vbs
Set wsh = CreateObject("WScript.Shell")
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
```

②スクリプトのあるフォルダのパスの取得。**PATHを通したフォルダの情報を持ちたくなかった為、スクリプト本体をそのフォルダに入れて、起動時に取得**するようにしています。

```neutrino.vbs
folderName = fso.getParentFolderName(WScript.ScriptFullName)
```

③ショートカット作成対象が引数として与えられている場合にはそれを使用します。**右クリックメニューから起動された場合はフルパスが引数として与えられます。**

```neutrino.vbs
If WScript.Arguments.Count <> 0 Then
	target = WScript.Arguments(0)
```

④引数がない場合は、クリップボードの内容を使用します。

```neutrino.vbs
Else
	Dim ObjHTML
	Set objHTML = CreateObject("htmlfile")
	target = Trim(objHTML.ParentWindow.ClipboardData.GetData("text"))
End If
```

⑤ここから⑧まではループ処理です。ショートカット名を入力するボックスを表示します。ブランクの場合ループを抜け、入力があれば作成するショートカットのフルパスを生成します。

```neutrino.vbs
linkName = InputBox("Please enter the shortcut name", "neutrino")
If linkName = "" Then
	Exit Do
Else
	fullPath = folderName & "\" & linkName & ".lnk"
End If
```

⑥既に同名のショートカットが存在する場合は上書き可否を確認し、問題なければショートカットを作成(上書き)しループを抜けます。

```neutrino.vbs
If fso.FileExists(fullPath) = True Then
	ans = MsgBox("The shortcut name already exist. Do you overwite?", vbYesNoCancel, "neutrino")

	If ans = vbYes Then
		Set sc = wsh.CreateShortcut(fullPath)
		sc.TargetPath = target
		sc.save
		Exit Do
```

⑦上書きしない場合にはショートカットは作成しません。ループも抜けず⑤に戻ります。

```neutrino.vbs
ElseIf ans = vbNo Then

Else
	Exit Do
End If
```

⑧そもそも同名のショートカットが存在しない場合は、ショートカットを作成しループを抜けます。

```neutrino.vbs
Else
	Set sc = wsh.CreateShortcut(fullPath)
	sc.TargetPath = target
	sc.save
	Exit Do
End If
```

⑨オブジェクトを解放し終了。

```neutrino.vbs
Set wsh = Nothing
Set fso = Nothing
Set sc = Nothing
```

#8.おまけ
以下の様なbatファイルを作成し実行すると、複数のショートカットを同時に起動出来ます。batファイル自体もどこかに置いておき、ショートカットを登録しておくと便利です。ぜひ使ってみてください。

```multitest.bat
start test1
start test2
start test3
```