//!*script // FastCopyを使った削除/複写/移動/同期ルーチン Ver 4.4 // 同一ドライブ間での移動は*ppcfileを使用する // 引数1:fastcopyの/cmd // 引数2:fastcopyの/force_start // 使用エイリアス:FastCopy // ============================================================ //^変数宣言 var arg1 = ''; // 引数:/cmd var arg2 = ''; // 引数:/force_start var FList = ''; // PPxレスポンスファイル名 var iDir = ''; // 入力元ディレクトリ var oDir = ''; // 出力先ディレクトリ var title = ''; // ウインドウタイトル var command = ''; // PPxコマンドワーク var RetCD = ''; // 戻り値 var WSHObj = ''; //wshシェル //スクリプト常駐指定 //PPx.StayMode = 0; //0:常駐解除 //PPx.StayMode = 1; //1:ファイルのみ常駐。現在は2:リソースも常駐すると同等ためコメントアウト // 相対ディレクトリ表示のみは速攻抜け if (PPx.EntryMarkCount == 0 ) { if ( (PPx.Extract('%C') == '..') || (PPx.Extract('%C') == '.') ) { PPx.Quit(); } } // 入力ディレクトリ確定 iDir = PPx.Extract('%FDN%\\'); //引数取得 arg1 = PPx.Arguments.Item(0); //0オリジン arg2 = ' ' + PPx.Arguments.Item(1); // サブルーチン:パスが深い場合への暫定対処。 // ファイル名のみでレスポンスファイルを作成し // 自前でパスを付与、BOM除去出力する。 function Func_ResFConv(iDir) { var iLine = ''; var FList = PPx.Extract('%a*8FCN'); PPx.Execute('%K \"@^END\"'); var StreamObjI = new ActiveXObject('ADODB.Stream'); var StreamObjO = new ActiveXObject('ADODB.Stream'); StreamObjI.Type = 2; StreamObjO.Type = 2; StreamObjI.CharSet = 'utf-8'; StreamObjO.CharSet = 'utf-8'; StreamObjI.Open(); StreamObjO.Open(); StreamObjI.LoadFromFile(FList); while (!StreamObjI.EOS) { iLine = StreamObjI.readText(-2); iLine = iDir + iLine; StreamObjO.WriteText(iLine,1); } StreamObjI.Close(); StreamObjO.SaveToFile(FList,2); StreamObjO.Close(); StreamObjI.Type = 1; StreamObjO.Type = 1; StreamObjI.Open(); StreamObjO.Open(); StreamObjI.LoadFromFile(FList); StreamObjI.Position = 3; StreamObjO.Write(StreamObjI.Read()); StreamObjI.Close(); StreamObjO.SaveToFile(FList,2); StreamObjO.Close(); StreamObjI = ''; StreamObjO = ''; PPx.Execute('%K"@^END"'); // マークを外す return FList; } //呼出モード判定 WSHObj = new ActiveXObject('WScript.Shell'); switch (arg1.toLowerCase()){ case 'delete': // deleteだけ他とは別扱い command = '%\"削除確認\"' if (PPx.EntryMarkCount < 2) { command = command + '%Q\"' + PPx.Extract('%C') + 'を削除しますか?\"'; } else { command = command + '%Q\"全' + PPx.EntryMarkCount + 'ファイルを削除しますか?\"'; } RetCD = PPx.Execute(command); if ( RetCD != 0) { PPx.Quit(); } FList = Func_ResFConv(iDir); command = PPx.Extract('%\'FastCopy\'') + ' /cmd=delete' + ' /force_close' + ' /error_stop' + arg2 + ' /no_confirm_del' + ' /wipe_del=FALSE' // + ' /log=FALSE' + ' /logfile=' + WSHObj.ExpandEnvironmentStrings('\"%Temp%\\fastcopy.log\"') + ' /utf8' + ' /srcfile=\"' + FList + '\"'; WSHObj.run(command,0,true); PPx.Quit(); break; case 'diff': case 'noexist_only': case 'update': case 'force_copy': title = '複写先パス'; break; case 'move': title = '移動先パス'; break; case 'sync': title = '同期先パス'; break; default: PPx.Echo('処理モード指定エラー。中断します。') PPx.Quit(); break; } // 出力ディレクトリ確定 command = '%\"' + title + '\"%ed%$2%\\'; oDir = PPx.Extract(command); if (oDir == '') { //ESC押下チェック PPx.Quit(); } // 同一ドライブ間移動チェック if (arg1.toLowerCase() == 'move') { if ( oDir.replace(/^([^\\]+|\\\\[^\\]+).*/,'$1') == iDir.replace(/^([^\\]+|\\\\[^\\]+).*/,'$1') ) { command = '*ppcfile !move,"' + oDir.replace(/%/g,'%%') + '",' + '/qstart ' + '/nocount ' // + '/min ' + '/same:2 ' // 上書き + '/sameall:on'; // 確認なし PPx.Execute(command); PPx.Quit(); } } // 入力ファイル確定 FList = Func_ResFConv(iDir); command = PPx.Extract('%\'FastCopy\'') + ' /cmd=' + arg1 + ' /force_close' //エラーが発生していた場合も強制的に終了 + arg2 ///force_start + ' /estimate' //コピー完了時間予測 + ' /error_stop' //エラー発生時にダイアログを出力 // + ' /disk_mode=diff' //別HDDモード + ' /disk_mode=auto' //自動判定 // + ' /log=FALSE' + ' /logfile=' + WSHObj.ExpandEnvironmentStrings('\"%Temp%\\fastcopy.log\"') + ' /utf8' //ログ出力UTF-8 + ' /exclude=\"$Recycle.Bin\\;RECYCLER\\;System Volume Information\\;VSNAP.IDX;Thumbs.db;desktop.ini"' + ' /reparse' //ジャンクション・マウントポイント・シンボリックリンクをコピー + ' /acl=FALSE' //アクセスコントロールリストをコピーしない + ' /stream=FALSE' //副次ストリームをコピーしない + ' /verify' //MD5によるベリファイ + ' /skip_empty_dir=FALSE' //空ディレクトリもコピーする + ' /srcfile=\"' + FList + '\"' + ' /to=\"' + oDir +'\"'; WSHObj.run(command,0,false); //0:ウィンドウ非表示 false:終了待機しない // 後処理 WSHObj = ''; PPx.Quit();