編集中のファイルをFTPでアップロードするサクラエディタマクロ
編集中のファイルの2行目にアップロード先のパスを記入し、マクロを実行します。
こんなかんじで。
|
|
[sakura_ftpUpload.js]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var util = Utility(); | |
// settings | |
var FTP_IP = "xxx.xxx.xxx.xxx"; | |
var FTP_USER = "username"; | |
var FTP_PASSWORD = "password"; | |
var FTP_MODE = "ascii"; | |
// メイン関数 | |
(function main(){ | |
var locFilename = GetFilename(); // 転送元ファイル名 | |
var ftpFilename = getFtpFilename(); // 転送先ファイル名 | |
if (ftpFilename == "") { | |
util.echo("アップロード先フォルダの絶対パスがファイル内に必要です。\n" + | |
"ファイルの2行目に、下記の記述を追加して下さい。\n" + | |
"\n" + | |
"# PATH:絶対パス\n" + | |
"\n" + | |
"記入例) # PATH:/home/user/"); | |
return; | |
} | |
var ret = util.question("FTP転送を行います" + "\n" | |
+ " FROM->\t:" + locFilename + "\n" | |
+ " TO->\t\t:" + ftpFilename); | |
if (!ret){ | |
return; | |
} | |
ftp = myFtp(FTP_IP, FTP_USER, FTP_PASSWORD,FTP_MODE); | |
ftp.upload(locFilename, ftpFilename); | |
})(); | |
/** | |
* FTP転送するファイル名を取得 | |
* FTP転送先のファイル名は、ファイルの2行目に | |
* | |
* # PATH:絶対パス | |
* | |
* の形式で記述されている | |
*/ | |
function getFtpFilename(){ | |
MARK="PATH:"; | |
filename = GetLineStr(2).replace("\r","").replace("\n",""); | |
if (filename.indexOf(MARK) > -1) { | |
filename = filename.slice(filename.indexOf(MARK) + MARK.length) + "/" + ExpandParameter("$f"); | |
} else { | |
filename = ""; | |
} | |
return filename; | |
} | |
/** | |
* FTP転送を行うオブジェクト | |
*/ | |
function myFtp(aHost, aUser, aPassword, aMode){ | |
var host = aHost; | |
var user = aUser; | |
var password = aPassword; | |
var mode = aMode; | |
var tmp = (new ActiveXObject( "WScript.Shell" )).ExpandEnvironmentStrings("%tmp%").replace(/\\/g, "/"); | |
var tmpFtpText = tmp + "/sakura_ftp_command.txt"; | |
var tmpBatText = tmp + "/sakura_ftp_bat.bat"; | |
return { | |
upload : function(from, to){ | |
this._exec("put \"" + from + "\" \"" + to + "\""); | |
} | |
,_exec : function(cmd1){ | |
var io = TextIO(); | |
var ws1 = io.getTextWriter(tmpFtpText); | |
ws1.WriteLine("open " + host); | |
ws1.WriteLine(user); | |
ws1.WriteLine(password); | |
ws1.WriteLine(mode); | |
ws1.WriteLine(cmd1); | |
ws1.WriteLine("quit"); | |
ws1.close(); | |
var ws2 = io.getTextWriter(tmpBatText); | |
ws2.WriteLine("ftp -s:" + "\"" + tmpFtpText + "\""); | |
ws2.WriteLine("pause"); | |
ws2.close(); | |
util.run(tmpBatText); | |
} | |
}; | |
} | |
/** | |
* ファイルの読み書きを行う | |
*/ | |
function TextIO(){ | |
var fso = new ActiveXObject("Scripting.FilesystemObject"); | |
var ForWriting = 2; // ファイルを書き込み専用として開きます。 | |
var ForAppending = 8; // ファイルを開き、ファイルの最後に追加して書き込みます。 | |
return { | |
getTextWriter : function(file){ | |
if (fso.FileExists(file)){ | |
fso.DeleteFile(file); | |
} | |
return fso.OpenTextFile(file, 2, true); | |
} | |
} | |
} | |
/** | |
* ユーティリティー関数群 | |
*/ | |
function Utility(){ | |
var shell = new ActiveXObject("WScript.Shell"); | |
var macroname = ExpandParameter("$M"); | |
return { | |
echo: function(str){ | |
shell.popup(str); | |
}, | |
question : function(str){ | |
var ret = shell.popup(str,0,macroname,1); | |
return ret == 1 ? true : false; | |
}, | |
run : function(exe){ | |
return shell.Run(exe); | |
}, | |
getExt: function(filename){ | |
ext = ExpandParameter(filename); | |
ext = ext.substring(ext.lastIndexOf(".") + 1); | |
return ext; | |
} | |
} | |
}; |