⭕ ディレクトリ選択でバックアップするフォルダを決定
⭕ カレント(このスクリプトを実行したフォルダ)にスクリプトが作成されます
⭕ 新しいスクリプトを実行
⭕ カレントにバックアップ用のフォルダが作成されます
⭕ バックアップするフォルダ内をそのフォルダ内に全てコピーします
▼ 実行時に表示されるフォルダ選択
XCOPY なので、2回目以降は新しいファイルのみコピーします
▼ 作成されたスクリプトのサンプルです
strName = "BK_C_temp_lightbox" strTarget = "C:\temp\lightbox" strBackupFolder = "C:\tmp\vbs" if MsgBox( strTarget & vbCrLf & "のバックアップを開始します。よろしいですか? (保存先:" & strBackupFolder & "\" & strName & ")", 1 ) = 2 then Wscript.Quit end if Set WshShell = Wscript.CreateObject( "WScript.Shell" ) ExecCommand = "cmd.exe /C ""xcopy.exe """ & strTarget & """ """ & strBackupFolder & "\" & strName & "\"" /D /E /C /S /Y & PAUSE""" Call WshShell.Run( ExecCommand )
▼ 使用するオプション/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 ) ' ② 文字列による直接指定 ' strRoot = "c:\" ' Set objFolder = Shell.BrowseForFolder( 0, "バックアップするフォルダを選択してください", &H4B, strRoot ) ' ③ ルートを番号で指定( この場合は C:\Users\username\AppData\Local ) ' ※ あまり現実的ではない特殊ディレクトリの選択 ' nRoot = &h1c ' Set objFolder = Shell.BrowseForFolder( 0, "バックアップするフォルダを選択してください", &H4B, nRoot ) 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 = """ & strName & """" OutFile.WriteLine "strTarget = """ & strTargetFolder & """" OutFile.WriteLine "strBackupFolder = """ & strBackupFolder & """" OutFile.Write "if MsgBox( strTarget & vbCrLf & ""のバックアップを開始します。よろしいですか? (保存先:"" & strBackupFolder & ""\"" & strName & "")""" 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 """""" & strTarget & """""" """""" & strBackupFolder & ""\"" & strName & ""\""""" OutFile.WriteLine " /D /E /C /S /Y & PAUSE""""""" OutFile.WriteLine "Call WshShell.Run( ExecCommand )" OutFile.Close WScript.Echo "バックアップスクリプト : " & strName & ".vbs" & " を作成しました" ' *********************************************************** ' ディレクトリ指定用番号 ' https://docs.microsoft.com/ja-jp/windows/desktop/api/shldisp/ne-shldisp-shellspecialfolderconstants ' typedef enum { ' ssfALTSTARTUP = 0x1d, ' ssfAPPDATA = 0x1a, ' ssfBITBUCKET = 0x0a, ' ssfCOMMONALTSTARTUP = 0x1e, ' ssfCOMMONAPPDATA = 0x23, ' ssfCOMMONDESKTOPDIR = 0x19, ' ssfCOMMONFAVORITES = 0x1f, ' ssfCOMMONPROGRAMS = 0x17, ' ssfCOMMONSTARTMENU = 0x16, ' ssfCOMMONSTARTUP = 0x18, ' ssfCONTROLS = 0x03, ' ssfCOOKIES = 0x21, ' ssfDESKTOP = 0x00, ' ssfDESKTOPDIRECTORY = 0x10, ' ssfDRIVES = 0x11, ' ssfFAVORITES = 0x06, ' ssfFONTS = 0x14, ' ssfHISTORY = 0x22, ' ssfINTERNETCACHE = 0x20, ' ssfLOCALAPPDATA = 0x1c, ' ssfMYPICTURES = 0x27, ' ssfNETHOOD = 0x13, ' ssfNETWORK = 0x12, ' ssfPERSONAL = 0x05, ' ssfPRINTERS = 0x04, ' ssfPRINTHOOD = 0x1b, ' ssfPROFILE = 0x28, ' ssfPROGRAMFILES = 0x26, ' ssfPROGRAMFILESx86 = 0x30, ' ssfPROGRAMS = 0x02, ' ssfRECENT = 0x08, ' ssfSENDTO = 0x09, ' ssfSTARTMENU = 0x0b, ' ssfSTARTUP = 0x07, ' ssfSYSTEM = 0x25, ' ssfSYSTEMx86 = 0x29, ' ssfTEMPLATES = 0x15, ' ssfWINDOWS = 0x24 ' } ShellSpecialFolderConstants; ' ***********************************************************関連する Microsoft ドキュメント Shell Reference Shell Objects for Scripting and Microsoft Visual Basic Shell object Shell.BrowseForFolder method