2017年12月20日


XCOPY 用バックアップスクリプト(VBS) を作成する createBackupScript.vbs / 2回目からは新しいファイルのみバックアップ



ダウンロードした zip の中に createBackupScript.vbs があります。それを実行するだけです。実行すると、以下のディレクトリ選択ダイアログが表示されます。



バックアップ先は、createBackupScript.vbs が存在するディレクトリになります。保存するディレクトリはネットワークドライブ内のディレクトリを指定すると、あちこちに PC の重要なファイルやフォルダを狙い撃ちでバックアップ可能になります。

バックアップはカレントになるので、バックアップ場所を変えたい場合は、createBackupScript.vbs を別の場所へコピーして実行して再びバックアップスクリプトを作成するか、既存のバックアップスクリプトのコピー先のフォルダのパスを変更します。

スクリプトコード内の strTarget の内容は、必要に応じて運用者が解りやすい日本語に変えるといいと思います。

▼ strTarget は、この表示にのみ使用されています


※ ▼ "C:\httpd142p" を指定した結果


時間がかかるのは最初の実行時のみです。2回目からは新しいファイルしかコピーしません。

▼ 最初


▼ 直後にもう一度実行すると


作成されたスクリプトのコード
strName = Replace( UCase(WScript.ScriptName), ".VBS", "" )
strTarget = "C:\httpd142p"
if MsgBox( strTarget & vbCrLf & "のバックアップを開始します。よろしいですか?", 1 ) = 2 then
	Wscript.Quit
end if
Set WshShell = Wscript.CreateObject( "WScript.Shell" )
ExecCommand = "cmd.exe /C ""xcopy.exe ""C:\httpd142p"" ""D:\backup2\httpd\" & strName & "\"" /D /E /C /S /Y & PAUSE"""
Call WshShell.Run( ExecCommand )




▼ 以下概要
------------------------------------------------------------------------

ディレクトリ選択でバックアップするディレクトリを決定し、カレントディレクトリにバックアップする為のスクリプトを作成します。

そのスクリプトを実行すると、カレントに目的のディレクトリをバックアップとしてコピーします。
XCOPY なので、2回目以降は新しいファイルのみコピーします

▼ 使用するオプション
/D : コピー元の日付がコピー先の日付より新しいファイルだけをコピーします
/E : ディレクトリまたはサブディレクトリが空であってもコピーします
/C : エラーが発生してもコピーを続けます
/S : 空の場合を除いて、ディレクトリとサブディレクトリをコピーします
/Y : 既存のファイルを上書きする前に確認のメッセージを表示しません

一番重要なのは、/D です。/S /E で、存在するディリクトリはすべてコピーされます。/E /Y によって、最後まで停止する事なく実行されます。

追加で使う事が想定されるオプション

コピーしたくないディレクトリやファイルがある場合、以下のように指定します。

/EXCLUDE:ファイルのパス

ファイルのパスが示すテキストファイル内に、除外するディレクトリやファイルにある文字列の一部を1 行に 1 つずつ記述します。

その文字列が、コピー対象ファイルの絶対パスの一部と一致した場合、そのファイルはコピーから除外されます。たとえば、"\obj\" という文字列を指定するとディレクトリ obj の下の全ファイルが除外 されます。".obj" という文字列を指定すると .obj という拡張子のファイルがすべて除外されます

' ***********************************************************
' 処理開始
' ***********************************************************
Set Fso = Wscript.CreateObject( "Scripting.FileSystemObject" )
Set Shell = Wscript.CreateObject( "Shell.Application" )

' ***********************************************************
' 実行中ディレクトリの取得
' ***********************************************************
strPath = Wscript.ScriptFullName 
Set objFile = Fso.GetFile( strPath )
strBackupFolder = Fso.GetParentFolderName( objFile )

' ***********************************************************
' バックアップ対象ディレクトリの取得
' ***********************************************************
' マイ コンピュータを基準にディレクトリ選択
Set objFolder = Shell.BrowseForFolder( 0, "バックアップするフォルダを選択してください", &H4B, _
	"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" )
if objFolder is nothing then
	WScript.Quit
end if
if not objFolder.Self.IsFileSystem then
	WScript.Echo "ファイルシステムではありません"
	WScript.Quit
end if

strTargetFolder = objFolder.Self.Path
strName = Replace( strTargetFolder, ":", "" )
strName = Replace( strName, "\", "_" )
strName = Replace( strName, " ", "" )
strName = "BK_" & strName

' ***********************************************************
' スクリプト作成
' ***********************************************************
Set OutFile = Fso.OpenTextFile( strBackupFolder & "\" & strName & ".vbs", 2, True )

OutFile.WriteLine "strName = Replace( UCase(WScript.ScriptName), "".VBS"", """" )"
OutFile.WriteLine "strTarget = """ & strTargetFolder & """"
OutFile.Write "if MsgBox( strTarget & vbCrLf & ""のバックアップを開始します。"
OutFile.WriteLine "よろしいですか?"", 1 ) = 2 then"
OutFile.WriteLine "	Wscript.Quit"
OutFile.WriteLine "end if"

OutFile.WriteLine "Set WshShell = Wscript.CreateObject( ""WScript.Shell"" )"
OutFile.Write "ExecCommand = ""cmd.exe /C """"xcopy.exe """""
OutFile.Write strTargetFolder & """"" """""
OutFile.Write strBackupFolder & "\"" & strName & ""\"""""
OutFile.WriteLine " /D /E /C /S /Y & PAUSE"""""""
OutFile.WriteLine "Call WshShell.Run( ExecCommand )"

OutFile.Close

WScript.Echo "バックアップスクリプト : " &  strName & ".vbs" & " を作成しました"






タグ:VBScript
posted by at 12:07 | 職人的 Windows | このブログの読者になる | 更新情報をチェックする