Skip to content

Instantly share code, notes, and snippets.

@kunst1080
Created December 1, 2013 09:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save kunst1080/7730253 to your computer and use it in GitHub Desktop.
Save kunst1080/7730253 to your computer and use it in GitHub Desktop.
編集中のファイルをFTPでアップロードするサクラエディタマクロ
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;
}
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment