エディタで編集したファイルをすかさずアップロードする
WSHがなにやら面白げなのでEmEditorで編集したファイルをすかさずFTPでアップロードするスクリプトを組んでみた。かなり便利かも。
ちなみに、エディタは
wscript.exe "スクリプトのファイル名" "編集中のファイルパス"
という形式でコマンドを打つことが出来れば何でもかまいません。EmEditorならば「ツール->外部ツール->外部ツールの設定->新規制作」で外部ツールの設定画面を出して、「コマンド」に「wscript.exe」、引数に
"スクリプトのファイル名" $(Path)
と入力すればOK。タイトルは適当で良いです。Ctrl+Alt+sにでもバインドしておけば、Ctrl+sで保存した後すぐに押せて良い感じです。
FTP部分は外部コンポーネントを使ったのでBASP21 DLLをダウンロードしてきて適当にインストールしてください。
ではスクリプト部分を
// QuickFTP
/* Settings ============================================================ */
// "Local Folder" : ["FTP Server", "Account", "Password", "Remote Root Directory"]
var DirMap = {"D:\\SERVERS\\HTTP\\ishikawa" : ["s91.xrea.com", "arielworks", "******", "/public_html/ishikawa.arielworks.com"],
"D:\\SERVERS\\HTTP\\web" : ["s91.xrea.com", "arielworks", "******", "/public_html/www.arielworks.net"]};
/* ===================================================================== */
var CurrentPath = WScript.Arguments.Item(0);
// sort PathMap (transform into 2D(3D) array)
var DirMap = sortObjectByKeyLength(DirMap);
// select connection setting
var pos;
var ifExist = false;
for (pos in DirMap) {
var CurrentPathRE = new RegExp("^" + DirMap[pos]["Key"].replace(/\\/g, "\\\\") + "\\\\"); // escape \ (\ -> \\)
if (CurrentPathRE.test(CurrentPath)) {
var Server = DirMap[pos]["Value"][0];
var User = DirMap[pos]["Value"][1];
var Pass = DirMap[pos]["Value"][2];
var lRoot = DirMap[pos]["Key"];
var rRoot = DirMap[pos]["Value"][3];
ifExist = true;
break;
}
}
if (!ifExist) {
WScript.Echo("Error: Invalid File Path");
WScript.Quit();
}
// Put File
var FTP = new ActiveXObject("basp21.FTP");
if (!FTP.Connect(Server, User, Pass)) {
// C:\HTTP\LocalDocRoot\hoge\index.html -> C:\HTTP\LocalDocRoot\hoge -> \hoge -> /hoge
var lRootStripEX = new RegExp("^" + lRoot.replace(/\\/g, "\\\\")); // escape \ (\ -> \\)
var SC = FTP.PutFile(CurrentPath, rRoot + CurrentPath.replace(/\\[^\\]*?$/, "").replace(lRootStripEX, "").replace(/\\/g, "/"));
if (SC != 1) {
WScript.Echo("Error: FTP Transfer Error \"" + FTP.GetReply() + "\"");
FTP.Close();
WScript.Quit();
}
} else {
WScript.Echo("Error: FTP Connection Error \"" + FTP.GetReply() + "\"");
WScript.Quit();
}
FTP.Close();
WScript.Echo("SUCCESS");
WScript.Quit();
function sortObjectByKeyLength(obj)
{
var result /*: obj*/ = new Array();
var key /*: String*/;
for (key in obj) {
var Unit /*: obj*/ = new Array();
Unit["Key"] = key;
Unit["Value"] = obj[key];
result.push(Unit);
}
result.sort(_sortObjectByKeyLengthCompare);
return result;
}
function _sortObjectByKeyLengthCompare(a, b)
{
return b["Key"].length - a["Key"].length;
}
ファイル名は「qftp.js」あたりが適当かと思われます。エディタ以外でも、例えばアップロードするファイルが決まっているなら、デスクトップに専用のショートカットを作っておけばダブルクリックするだけでアップロードすることもできます。
「SUCCESS」とダイアログが表示されれば正常にアップロードが完了しているはずです。
ルートディレクトリ(ローカルなら「C:\」、サーバなら「/」)に直にファイルを置いてあるとエラーになります(この部分の対応は面倒なので放置)。