簡単にUAスクリプトファイルを作成するスクリプト

またインスパイアされたわけだが

今回もSleipnirを初心者がいじりまくるブログさんのエントリに対する便乗エントリです。

しかも、今回紹介するスクリプト自体は元々自分用に既に作ってあって未公開だったものなので労力はほぼ0というおまけ付きw

UAスクリプト用フォルダにスクリプトを作るスクリプト

ScriptCreator.js

(function(){
	var exe = "notepad";
	
	var fso = sleipnir.CreateObject("Scripting.FileSystemObject");
	var filename = "";
	while(true) {
		filename = namingScriptFile(filename);
		if(fso.FileExists(ScriptFullName.replace(ScriptName, filename + ".js"))){
			if(confirm("既にそのファイル名のスクリプトが存在します\r\nそのファイルを開きますか?")) {
				sleipnir.CreateObject("WScript.Shell").Run('\"' + exe + '\" ' + ScriptFullName.replace(ScriptName, filename + ".js"));
				filename = null;
				break;
			}else {
				alert("もう一度ファイル名を入力してください");
			}
		}else {
			break;
		}
	}
	
	if(filename != null) {
		if(filename.length > 0) {
			var path = fso.BuildPath(ScriptFullName.replace(ScriptName, ""), filename + ".js");
			try {
				var stream = fso.OpenTextFile(path, 8, true, -2);
				stream.WriteLine("(function(){");
				stream.WriteLine("\t");
				stream.Write("})();");
			}finally {
				stream.Close();
			}
			sleipnir.CreateObject("WScript.Shell").Run('\"' + exe + '\" ' + path);
		}else {
			sleipnir.CreateObject("WScript.Shell").Run('\"' + exe + '\" ' + ScriptFullName);
		}
	}

function namingScriptFile(filename) {
	var name = filename;
	while(true) {
		name = prompt("入力したファイル名でUAスクリプトを作ります\r\nなお、'\\'と入力するとこのスクリプト自体を開きます",name);
		
		if(name == null) {
			alert("スクリプトの実行をキャンセルします");
			return null;
		}else if(name.match(/^\\$/) != null) {
			return "";
		}else if(name.length > 0){
			if(name.match(/\W/) == null) {
				return name;
			}else {
				alert("入力したファイル名が不正です");
			}
		}
	}
}

})();

メモ帳以外のテキストエディタ使ってる人は最初の変数の代入値を変えてください。
たとえば私は Win 7 x64 で Crescent Eve を使っているので

var exe = "notepad";

var exe = "C:\\Program Files (x86)\\Crescent Eve\\Eve.exe";

となります。
ポイントとしてはフォルダの区切りの"\"(バックスラッシュまたは円記号)を"\\"と二つ重ねてください。
なお、引数でテキストファイル名のみ指定でファイルを読み込み起動できるソフトにしか対応してませんが、それ以外のテキストエディタって稀だと思うし、そんなの使ってる人ならスクリプトの修正なぞ造作もないという偏見で気にしないことにしますw
また、拡張子が".js"と Javascript*1 固定ですが現在 VBScriptスクリプト書いている Sleipnir ユーザの存在を把握してないので問題ないはずw*2

仕様として既存のスクリプトファイルがあればそのファイルを開きます。
あと、"\"一文字だけだと自分自身を開きます。デバッグ用に用意してたものです。*3
ファイル名は英数字とアンダーバーのみ通ります。

Seahorseスクリプト用フォルダにスクリプトを作るスクリプト

ScriptCreatorForSeahorse.js

(function(){
	var exe = "notepad";
	
	var fso = sleipnir.CreateObject("Scripting.FileSystemObject");
	
	var shpath = ScriptFullName.replace(ScriptName, "").split("\\");
	shpath[shpath.length - 2] = "seahorse";
	
	var filename = "";
	while(true) {
		filename = namingScriptFile(filename);
		shpath[shpath.length - 1] = filename + ".user.js";
		if(fso.FileExists(shpath.join("\\"))){
			if(confirm("既にそのファイル名のスクリプトが存在します\r\nそのファイルを開きますか?")) {
				sleipnir.CreateObject("WScript.Shell").Run('\"' + exe + '\" ' + shpath.join("\\"));
				filename = null;
				break;
			}else {
				alert("もう一度ファイル名を入力してください");
			}
		}else {
			break;
		}
	}
	
	if(filename != null) {
		if(filename.length > 0) {
			var path = shpath.join("\\");
			try {
				var stream = fso.OpenTextFile(path, 8, true, -2);
				stream.WriteLine("// ==UserScript==");
				stream.WriteLine("// @name         " + filename);
				stream.WriteLine("// @include      ");
				stream.WriteLine("// @exclude      ");
				stream.WriteLine("// @type         SleipnirScript");
				stream.WriteLine("// ==/UserScript==");
				stream.WriteLine("(function(){");
				stream.WriteLine("\t");
				stream.Write("})();");
			}finally {
				stream.Close();
			}
			sleipnir.CreateObject("WScript.Shell").Run('\"' + exe + '\" ' + path);
		}else {
			sleipnir.CreateObject("WScript.Shell").Run('\"' + exe + '\" ' + ScriptFullName);
		}
	}
function namingScriptFile(filename) {
	var name = filename;
	while(true) {
		name = prompt("入力したファイル名でSeahorseスクリプトを作ります\r\nなお、'\\'と入力するとこのUAスクリプト自体を開きます",name);
		
		if(name == null) {
			alert("スクリプトの実行をキャンセルします");
			return null;
		}else if(name.match(/^\\$/) != null) {
			return "";
		}else if(name.length > 0){
			if(name.match(/\W/) == null) {
				return name;
			}else {
				alert("入力したファイル名が不正です");
			}
		}
	}
}

})();

前述のやつのSeaHorse版です。
仕様は一緒です。
本来こっちには"seahorse"フォルダがあるかチェックが必要な気もしますが、元来個人用のものなのでブッチしてます。

*1:厳密には JScript

*2:ってか、現在"新作"スクリプト公開している人間自体ほぼ居ないしね

*3:"\"である必然性は特に無いです。ファイル作成における禁止文字なら何でも良かった