HOME   »  スポンサー広告  »  スポンサーサイト   »  便利ツール  »  【自作】データのバックアップツール【便利ツール】

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【自作】データのバックアップツール【便利ツール】

こんばんは、バイスです。

小説の執筆はもっぱらテキストエディタでの作業です。
つい先日、ネタ帳代わりに使っていたファイルを、
同じ名前の別ファイルで上書きしてしまうというとんでもないアクシデントが起きてしまいましたorz

泣くに泣けなかったので、バックアップはちゃんと取ろうと思い、ツールを作りました。

動きは単純で指定したフォルダを圧縮して、別の場所にコピーして世代管理するだけのものです。

Windows標準搭載のタスクスケジュールに登録すれば、毎週日曜のお昼にバックアップ!とかも可能です。

大事なファイルは皆さんこまめにバックアップをとりましょうね……

ちなみに開発環境はJscriptです。


興味のある人は詳細は続きから
さて、少しばかりプログラムの知識が必要な話になります。
といっても普段パソコン使っている人なら分かるレベルです。


まず、メモ帳などのテキストエディタを開いて以下のソースコードをコピペします。


//-----------------------ここからコピペ----------------------------------

//製作者  バイス
//制作日  2012/7/27
//ツール名 バックアップツール
//対応OS Windows XP, Vista, 7
//開発環境 Jscript

//現在時刻取得
function getTime(mode){
var objDate = new Date();
var month = objDate.getMonth() + 1;
if (month < 10){
month = "0" + month;
}
var date = objDate.getDate();
if (date < 10){
date = "0" + date;
}
var hours = objDate.getHours();
if (hours < 10){
hours = "0" + hours;
}

var minutes = objDate.getMinutes();
if (minutes < 10){
minutes = "0" + minutes;
}
var seconds = objDate.getSeconds();
if (seconds < 10){
seconds = "0" + seconds;
}
if (mode ==1){
return objDate.getYear() + "_" + month + "_" + date + "_" + hours + minutes + seconds;
}
else{
return objDate.getYear() + "/" + month + "/" + date + " " + hours + ":" + minutes + ":" + seconds;
}
}

/********************************/
/* main */
/********************************/

/* 初期変数定義 */

// ファイル読み込みモード定義
var ForReading = 1; // 読み込み
var ForWriting = 2; // 書き込み 上書き
var ForAppending = 8; // 書き込み 追記


// オブジェクト変数定義
var objFileSys; // ファイルシステムオブジェクト
var objShell; // WSHオブジェクト
var objApp; // オートメーションオブジェクト

// 環境変数定義
var jsname; // jsファイル名
var jspath; // jsファイルフルパス名
var jsdir; // jsファイル格納ディレクトリ名


// ローカル変数定義
var strDate; // 現在時刻取得用
var strDate2; // 表示用
var bkdir; // バックアップ先ディレクトリ名
var bkname; // バックアップファイル名
var bkpath; // バックアップファイルパス名
var UsrProf; // ユーザーアカウント名
var CreateFolder; // フォルダ作成用
var Dropbox; // dropboxバックアップデータ格納ディレクトリパス名
var objShellFolder; // dropboxのバックアップ元ディレクトリ情報
var objFolderItems; // dropboxバックアップ元ディレクトリのフォルダオブジェクト
var targetFile; // コピー対象ファイル情報
var filename; // コピー対象ファイル名
var filelist =""; // コピー対象ファイル名格納用
var objOpenTxt; // 一時ファイル処理用ファイルハンドル
var tmpfile; // 一時ファイル名
var OutObj; // コマンド実行用
var cpypath; // コピー元パス
var Array1= []; // 世代交代用
var gene_dir; // バックアップデータ保存用パス
var objgenefolder; // バックアップデータ情報
var cnt = 0; // バックアップファイル数用カウンタ
var targetFile_gene; // 世代管理対象ファイル情報
var filename_gene; // 世代管理対象ファイル名
var filepath_gene; // 世代管理対象ファイル名パス
var msg=""; // メッセージ出力用

/* ↓処理開始↓ */

// 現在時刻取得
strDate = getTime(1);


/////////////////////////////////////////////////////////
// ユーザー定義情報 //
// バックアップ先フォルダ設定 //
// 1.バックアップ先のフォルダを指定してください //
bkdir = ""; //
// //
// バックアップファイル名設定 //
// 2.バックアップ後のファイル名を指定してください //
// ※実際は「年月日_ファイル名.cab」形式で出力されます //
bkname = ""; //
// バックアップ対象フォルダ設定 //
// 3.バックアップをしたいフォルダを指定してください //
bkfile = ""; //
// ここまで //
/////////////////////////////////////////////////////////


// バックアップファイル名生成
bkname = strDate + "_" + bkname + ".cab";

// デバッグ1:バックアップ先情報
//WScript.Echo("bkdir = " + bkdir);
//WScript.Echo("bkname = " + bkname);

// オブジェクト設定
objFileSys = new ActiveXObject("Scripting.FileSystemObject");
objShell = new ActiveXObject("WScript.Shell");
objApp = new ActiveXObject("Shell.Application");

// バックアップ先フォルダ作成
if (objFileSys.FolderExists(bkdir) == false){
objFileSys.CreateFolder(bkdir);
}

//環境変数設定
jsname = WScript.ScriptName;
jspath = WScript.ScriptFullName;
jsdir = jspath.replace(jsname, "");

// デバッグ2:実行ファイル情報
//WScript.Echo("jsname = " + jsname);
//WScript.Echo("jspath = "+ jspath);
//WScript.Echo("jsdir = " + jsdir);

// ユーザーアカウント名取得
UsrProf = objShell.ExpandEnvironmentStrings("%USERPROFILE%");

// バックアップ元データ格納ディレクトリ取得
Dropbox = bkfile;

// バックアップ元ディレクトリ情報取得
objShellFolder = objApp.NameSpace(Dropbox);
objFolderItems = objShellFolder.Items();


// ディレクトリの中身を配列へ格納
for (var i = 0; i < objFolderItems.count; i++){
targetFile = objFolderItems.Item(i);
// ファイル名取得
filename =targetFile.Name;
filelist += "\"" + Dropbox + "\\" + filename + "\"\n";
}

// デバッグ3:バックアップデータ情報
//WScript.Echo("UsrProf = " + UsrProf);
//WScript.Echo("Dropbox = " + Dropbox);
//WScript.Echo("filelist = \n" + filelist);


/********************************/
/* 圧縮 */
/********************************/
// 圧縮用一時ファイル作成
tmpfile = strDate + ".dat";
objOpenTxt = objFileSys.OpenTextFile(tmpfile, 8, true);
objOpenTxt.WriteLine(filelist);
objOpenTxt.Close();

//cabファイルへ圧縮
var command = 'makecab /D RptFileName=NUL /D InfFileName=NUL /D CabinetNameTemplate='
+ bkname + ' /D MaxDiskSize=0 /F "' + jsdir + "\\" + tmpfile + "\"";
// デバッグ4:圧縮用コマンド
//WScript.Echo("command = " + command);

OutObj = objShell.Run(command, 7, true);

// 圧縮ファイルパス生成
bkpath = bkdir + "\\" + bkname;
cpypath = jsdir + "\disk1\\" + bkname;

// デバッグ5:バックアップパス情報
//WScript.Echo("before = " + cpypath);
//WScript.Echo("after = " + bkpath);

// 圧縮ファイル移動
objFileSys.MoveFile(cpypath, bkpath);

// 不要ファイル・ディレクトリ削除
objFileSys.DeleteFolder(jsdir + "\\disk1");
objFileSys.DeleteFile(jsdir + "\\" + tmpfile);

/********************************/
/* 世代管理 */
/********************************/
gene_dir = objApp.NameSpace(bkdir);
objgenefolder = gene_dir.Items();
for(var i = 0; i < objgenefolder.count; i++){
targetFile_gene = objgenefolder.Item(i);
filename_gene = targetFile_gene.Name;

if (filename_gene.match(/\.cab$/)){
filepath_gene = targetFile_gene.Path;

// デバッグ6:世代管理ファイル情報
//WScript.Echo("filename_gene = " + filename_gene);
//WScript.Echo("filepath_gene = " + filepath_gene);

Array1.push(filepath_gene);
cnt++;
}
}
// デバッグ7:世代管理ファイル数&削除対象ファイル
//WScript.Echo("cnt= " + cnt);
//WScript.Echo("Array[0] = " + Array1[0]);

// ファイル削除
if(cnt > 3){
// Array1[0]を消す
objFileSys.DeleteFile(Array1[0]);
}

/********************************/
/* メッセージ出力 */
/********************************/
strDate2 = getTime(2);

msg += strDate2 + "\n";
msg += "バックアップが完了しました\n\n";
msg += "バックアップ先:" + bkdir + "\n";
msg += "バックアップファイル名:" + bkname + "\n";
WScript.Echo(msg);

//-----------------------ここまでコピペ----------------------------------




名前を付けて保存します。名前はなんでもいいです。
拡張子は.jsが好ましいです。
「バックアップ.js」とか好きな名前にしましょう。


以下のユーザー設定情報を設定します。
↓↓↓↓↓↓

/////////////////////////////////////////////////////////
// ユーザー定義情報
// バックアップ先フォルダ設定
// 1.バックアップ先のフォルダを指定してください
bkdir = "";
//
// バックアップファイル名設定
// 2.バックアップ後のファイル名を指定してください
// ※実際は「年月日_ファイル名.cab」形式で出力されます
bkname = "";
// バックアップ対象フォルダ設定
// 3.バックアップをしたいフォルダを指定してください
bkfile = "";
// ここまで
/////////////////////////////////////////////////////////

bkdirの" "の間にバックアップしたファイルを保存したい場所を指定します。

bknameの" "の間にバックアップした時の名前を指定します。

bkfileの" "の間にバックアップを取りたいフォルダを指定します。

※重要
場所を指定する時はフルパス指定してください。
また、
C:\Users\viceといったフォルダを指定したい時は

C:\\Users\\vice
と「\」記号を1つ追加して記述してください。

◆バックアップ
バックアップしたファイルは指定したフォルダに日付順に管理されます。
デフォルトでは最大3つまで管理され、4つ目以降は古いものから上書きされます。

◆ご不明点・バグなどはバイスまで。


改造は自由ですが、無断配布はおやめください。
Comment
Trackback
Trackback URL
Comment Form
管理者にだけ表示を許可する
更新履歴


第十三回東方紅楼夢 お品書き 【10/16 委託情報公開】 (09/24)

例大祭14 お品書き (04/02)

紅楼夢12 お品書き (10/02)

紅楼夢12 (08/02)

メリーさん(オリジナル) (07/18)

総記事数:
カウントダウン
来てくれた人
Since 2012/06/11
応援よろしく
プロフィール

七空榮宴亭

Author:七空榮宴亭
東方を愛してやまない野郎の集まりです。

メールアドレスは
こちら

お品書き
通販委託情報
【従者の心得】 紹介ページ

【午前零時のセプテット・上】 紹介ページ

【午前零時のセプテット・下】 紹介ページ

【閉ざされた冬の幻想で】 紹介ページ

【忘れ形見の鈴蘭人形・上】

紹介ページ

【忘れ形見の鈴蘭人形・下】 紹介ページ

【Torisata Pandemic】 紹介ページ

つぶやき
最新コメント
最新トラックバック
月別アーカイブ
検索フォーム
RSSリンクの表示
QRコード
QR
リンク



・参加イベント


・お世話になっている印刷所


・お世話になっている委託先

・友人のホームページ HN:Darkssさん
DTM・ボカロを中心に作曲活動中
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。