秀丸ファイラーでバックアップを自動化すNo.07017
ebifurai55 さん 18/01/15 23:12
 
秀丸ファイラーでバックアップを自動化する事はできますか?

いつもお世話になっております、ebifurai55です。

さてくだんの件ですが、Widowsに標準についてる、

オートメーションの方法は正直スイッチが少ないと

思いました。そこでなんですけど、copyToSynchornizer

あたりで出きることを秀丸ファイラーでできないかな?

と思います。http://www.ne.jp/asahi/cool/kish/download-j.htm

更新や同期や普通のバックアップもできるようになりたいです。

秀丸ファイラーで何でも解決!という風な使い方はできますか?

できれば自分でボタンを推してコピー&ペーストしたいのですが、

この様な事は可能でしょうか?

[ ]
RE:07017 秀丸ファイラーでバックアップをNo.07018
秀丸担当 さん 18/01/16 10:44
 

秀丸ファイラーClassicのコピー処理等は基本的にWindows標準のものと同じになって
いて、バックアップに特化したような機能は無いです。
スクリプトを作ると、一応いろいろすることはできますが、コピー等はバッチファイ
ルやWSH(VBS/JS)でできることとほぼ同じです。

秀丸ファイラーClassicではないですが、Windows標準のコマンドとして、robocopyと
いうコマンドがあります。
robocopyを使うと、詳細な指定をしたコピーができます。
コマンドプロンプトでrobocopyを入力して実行し、引数にフォルダやオプションをい
ろいろ指定できます。

秀丸ファイラーClassicとしてrobocopyを使った貼り付けをしようとしたことがある
のですが、コマンドラインの上限があって正式には断念したものがありました。
参考情報として、次のコメントでスクリプトを書きます。

[ ]
RE:07018 秀丸ファイラーでバックアップをNo.07019
秀丸担当 さん 18/01/16 10:55
 

参考情報として、バックアップとは違いますが、robocopyを使った貼り付けのスクリ
プトです。
クリップボードにコピーした項目が多すぎる場合はエラーメッセージが出ます。
確認のためにコマンドプロンプトでキー入力が出ますが、「strParams += " & pause
";」の行を削除すればキー入力は出ません。
下記のスクリプトはrobocopyの起動オプションは/XOとなっていて新しいファイルだ
けをコピーするようになっています。
起動オプションでいろいろ条件を変えることができると思います。


var strOption = "/XO"; //新しいファイルだけをコピー
//--------------
strWScriptType = typeof( WScript );
if( strWScriptType.toLowerCase() == "object" ) {
  strMsg =
    "このスクリプトは秀丸ファイラーClassic専用です。\n" +
    "\n" +
    "「ブックマークの整理」または「ツールの整理」で「追加」して、" +
    "パスの右側の「>>」ボタンの「スクリプトの参照」より、このファ" +
    "イルを指定します。\n" +
    "(パスの先頭に「script:」と書かれたパスとして登録)"
  WScript.Echo( strMsg );
  WScript.Quit();
}

if(Version<103011){
  Message("このスクリプトの実行には秀丸ファイラーClassic V1.03β11以降が"
         +"必要です。");
  EndMacro();
}
var varVbArray = GetClipboardFiles();
var objArray = varVbArray.toArray();
var cFiles = objArray.length;
if( cFiles == 0 ) {
  Message("クリップボードにファイルがありません。");
  EndMacro();
}
//内容確認 Message( objArray.join("\n") );
var strOptionDesc = "";
if( strOption == "/XO" ) {
  strOptionDesc = "(新しいファイルだけをコピー)";
}
if( strOption != "" ) strOption = " " + strOption;
var objFso = new ActiveXObject("Scripting.FileSystemObject");
var strSrcDir = objFso.GetParentFolderName(objArray[0]);
var strDestDir = GetDirectory();
if( strSrcDir.toLowerCase() == strDestDir.toLowerCase() ) {
    Message("コピー元とコピー先のフォルダが同じです。");
    EndMacro();
}

if( Question(""
  + "「Robocopyで貼り付け」\n"
  + "新しいファイルだけをコピーします。\n"
  + "\n"
  + "-----------------------------------------------\n"
  + " コピー元:" + strSrcDir + "\n"
  + " コピー先:" + strDestDir + "\n"
  + " 対象:" + cFiles + " 個のファイルまたはフォルダ\n"
  + "-----------------------------------------------\n"
  + "\n"
  + "よろしいですか?\n"
  ) == 0
 ) {
  EndMacro();
}

var strParams = "/c ";
var cProcessed = 0;
var strNoDirFiles = "";
var i =0;
for( i = 0; i < cFiles; i ++ ) {
  var strOneFull = objArray[i];
  var strOneBase = objFso.GetFileName(strOneFull);
  if( objFso.GetParentFolderName(strOneFull).toLowerCase()
   != strSrcDir.toLowerCase() ) {
    Message("コピー元が1つのフォルダ配下ではありません。");
    EndMacro();
  }
  if( objFso.FolderExists(strOneFull) ) {
    if( cProcessed > 0 ) strParams += " & ";
    strDestDirSub = objFso.BuildPath(strDestDir,strOneBase);
    //strParams += "md " + AutoQuote(strDestDirSub);
    //strParams += " & ";
    strParams += "robocopy.exe"
      + " " + AutoQuote(strOneFull)
      + " " + AutoQuote(strDestDirSub)
      + " /E" + strOption;
    cProcessed ++;
  } else {
    strNoDirFiles += " " + AutoQuote(strOneBase);
  }
}
if( strNoDirFiles != "" ) {
  // /E /S 禁止
  if( cProcessed > 0 ) strParams += " & ";
  strParams += "robocopy.exe"
    + " " + AutoQuote(strSrcDir)
    + " " + AutoQuote(strDestDir)
    + strNoDirFiles
    + strOption;
  cProcessed ++;
}
if(cProcessed > 0 ) {
  strParams += " & pause";
}
if(strParams.length>=8000){
  Message("項目が多すぎます。");
  EndMacro();
}

//8190文字くらいでNG
var objShell = new ActiveXObject( "WScript.Shell" );
objShell.Run( "cmd.exe "+strParams, 1, 0 );
EndMacro();

function AutoQuote( str ) {
    if( str.indexOf(" ")>=0){
      return "\""+str+"\"";
    }
    if( str.indexOf("&")>=0){
      return "\""+str+"\"";
    }
    return str;
}

[ ]
RE:07019 秀丸ファイラーでバックアップをNo.07020
秀丸担当 さん 18/01/16 10:58
 

書き忘れましたが、スクリプトはメモ帳や秀丸エディタなどのテキストエディタに貼
り付けて、拡張子.jsで保存します。
例えば「c:\folder\test.js」に保存した場合、「ブックマークの整理」または
「ツールの整理」で「追加」して、「パス」の部分が「script:c:\folder\test.js」
となるようにします。
パスの右側の「>>」ボタンの「スクリプトの参照」より指定してもいいです。

[ ]