|
参考情報として、バックアップとは違いますが、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;
}
|
|