ファイルを比較

提供:MeryWiki
ナビゲーションに移動 検索に移動

Kuro 版[編集]

WinMerge にファイルのパスを渡すだけです。

ソースコード[編集]

#title = "ファイルを比較"
#tooltip = "WinMergeにファイルのパスを渡します。"

var path = "C:\\Program Files\\WinMerge\\WinMergeU.exe";
if (editor.documents.Count < 2) {
	status = "比較するファイルがありません";
	Quit();
}
status = document.Name + " と比較するファイルを選択します";
var m = CreatePopupMenu();
var d = editor.documents;
for (i = 0; i < d.Count; i++) {
	var item = d.item(i);
	if (item.FullName == document.FullName) {
		continue;
	}
	var s = "\"" + document.Name + "\" と \"" + item.Name + "\" を比較する";
	if (!item.Saved) {
		s = s + " *";
	}
	m.Add(s, i + 1);
}
var r = m.Track(1);
if (r > 0) {
	var item = d.Item(r - 1);
	if (!item.Saved) {
		item.Save(item.FullName);
	}
	if (!document.Saved) {
		document.Save(document.FullName);
	}
	var s = "\"" + path + "\" \"" + document.FullName + "\" \"" + item.FullName + "\"";
	status = s;
	var ws = new ActiveXObject("WScript.Shell");
	ws.Run(s);
}

MSY-07 版[編集]

Kuro氏が作成したマクロでは2つのファイルを比較することができますが、改造したことで下記のマクロでは2つのファイルの比較だけでなく、3つのファイルを比較することができるようになりました。

パラメーター[編集]

  • showComparisonMenu:メニュー表示のフラグ(true:表示、false:非表示)
  • comparisonType:デフォルトの比較方法(1:2つのファイル、2:3つのファイル)

ソースコード[編集]

#title = "ファイルを比較"
#tooltip = "WinMergeにファイルのパスを渡します。"

var path = "C:\\Program Files\\WinMerge\\WinMergeU.exe";
var showComparisonMenu = true; // メニュー表示のフラグ(true: 表示, false: 非表示)
var comparisonType = 1; // デフォルトの比較方法(1: 2つのファイル, 2: 3つのファイル)

if (!showComparisonMenu) {
	if (comparisonType == 2 && editor.documents.Count < 3) {
		status = "3つのファイルを比較するには、少なくとも3つのファイルを開いてください";
		Quit();
	}
}

if (editor.documents.Count < 2) {
	status = "比較するファイルがありません";
	Quit();
}

if (showComparisonMenu) {
	status = "比較方法を選択します";
	var comparisonMenu = CreatePopupMenu();
	comparisonMenu.Add("2つのファイルを比較する", 1);
	comparisonMenu.Add("3つのファイルを比較する", 2);

	comparisonType = comparisonMenu.Track(1);
	if (comparisonType == 0) {
		Quit(); // キャンセル
	}
}

if (comparisonType == 1) {
	// 2つのファイルを比較する
	status = document.Name + " と比較するファイルを選択します";
	var m = CreatePopupMenu();
	var d = editor.documents;

	for (i = 0; i < d.Count; i++) {
		var item = d.item(i);
		if (item.FullName == document.FullName) {
			continue;
		}
		var s = "\"" + document.Name + "\" と \"" + item.Name + "\" を比較する";
		if (!item.Saved) {
			s = s + " *";
		}
		m.Add(s, i + 1);
	}

	var r = m.Track(1);
	if (r > 0) {
		var item = d.Item(r - 1);
		if (!item.Saved) {
			item.Save(item.FullName);
		}
		if (!document.Saved) {
			document.Save(document.FullName);
		}
		var s = "\"" + path + "\" \"" + document.FullName + "\" \"" + item.FullName + "\"";
		status = s;
		var ws = new ActiveXObject("WScript.Shell");
		ws.Run(s);
	}
} else if (comparisonType == 2) {
	// 3つのファイルを比較する
	if (editor.documents.Count < 3) {
		status = "3つのファイルを比較するには、少なくとも3つのファイルを開いてください";
		Quit();
	}

	status = document.Name + " と比較する2つのファイルを選択します";
	var m = CreatePopupMenu();
	var d = editor.documents;

	for (i = 0; i < d.Count; i++) {
		var item = d.item(i);
		if (item.FullName == document.FullName) {
			continue;
		}
		var s = "\"" + document.Name + "\" と \"" + item.Name + "\" を比較対象に追加";
		if (!item.Saved) {
			s = s + " *";
		}
		m.Add(s, i + 1);
	}

	var r1 = m.Track(1);
	if (r1 > 0) {
		var firstItem = d.Item(r1 - 1);
		if (!firstItem.Saved) {
			firstItem.Save(firstItem.FullName);
		}

		var m2 = CreatePopupMenu();
		for (i = 0; i < d.Count; i++) {
			var item = d.item(i);
			if (item.FullName == document.FullName || item.FullName == firstItem.FullName) {
				continue;
			}
			var s = "\"" + document.Name + "\" と \"" + firstItem.Name + "\" と \"" + item.Name + "\" を比較";
			if (!item.Saved) {
				s = s + " *";
			}
			m2.Add(s, i + 1);
		}

		var r2 = m2.Track(1);
		if (r2 > 0) {
			var secondItem = d.Item(r2 - 1);
			if (!secondItem.Saved) {
				secondItem.Save(secondItem.FullName);
			}
			if (!document.Saved) {
				document.Save(document.FullName);
			}
			var s = "\"" + path + "\" \"" + document.FullName + "\" \"" + firstItem.FullName + "\" \"" + secondItem.FullName + "\"";
			status = s;
			var ws = new ActiveXObject("WScript.Shell");
			ws.Run(s);
		}
	}
}
スポンサーリンク