ディレクトリ選択でバックアップするフォルダを決定
カレント(このスクリプトを実行したフォルダ)にスクリプトが作成されます
新しいスクリプトを実行
カレントにバックアップ用のフォルダが作成されます
バックアップするフォルダ内をそのフォルダ内に全てコピーします ▼ 実行時に表示されるフォルダ選択
XCOPY なので、2回目以降は新しいファイルのみコピーします ▼ 作成されたスクリプトのサンプルです
01.
strName =
"BK_C_temp_lightbox"
02.
strTarget =
"C:\temp\lightbox"
03.
strBackupFolder =
"C:\tmp\vbs"
04.
if MsgBox( strTarget & vbCrLf &
"のバックアップを開始します。よろしいですか? (保存先:"
& strBackupFolder &
"\" & strName & "
)", 1 ) = 2 then
05.
Wscript.Quit
06.
end if
07.
Set
WshShell = Wscript.CreateObject(
"WScript.Shell"
)
08.
ExecCommand =
"cmd.exe /C "
"xcopy.exe "
""
& strTarget &
""
" "
""
& strBackupFolder &
"\" & strName & "
\
""
/D /E /C /S /Y & PAUSE
""
"
09.
Call
WshShell.Run( ExecCommand )
▼ 使用するオプション/D : コピー元の日付がコピー先の日付より新しいファイルだけをコピーします /E : ディレクトリまたはサブディレクトリが空であってもコピーします /C : エラーが発生してもコピーを続けます /S : 空の場合を除いて、ディレクトリとサブディレクトリをコピーします /Y : 既存のファイルを上書きする前に確認のメッセージを表示しません一番重要なのは、/D です。/S /E で、存在するディリクトリはすべてコピーされます。/E /Y によって、最後まで停止する事なく実行されます。
追加で使う事が想定されるオプション
コピーしたくないディレクトリやファイルがある場合、以下のように指定します。
/EXCLUDE:ファイルのパス
ファイルのパスが示すテキストファイル内に、除外するディレクトリやファイルにある文字列の一部を1 行に 1 つずつ記述します。
その文字列が、コピー対象ファイルの絶対パスの一部と一致した場合、そのファイルはコピーから除外されます。
▼ 例
"\obj\" という文字列を指定するとディレクトリ obj の下の全ファイルが除外 されます。
".obj" という文字列を指定すると .obj という拡張子のファイルがすべて除外されます
ソースコード
001.
' ***********************************************************
002.
' 処理開始
003.
' ***********************************************************
004.
Set
Fso = Wscript.CreateObject(
"Scripting.FileSystemObject"
)
005.
Set
Shell = Wscript.CreateObject(
"Shell.Application"
)
006.
007.
' ***********************************************************
008.
' 実行中ディレクトリの取得
009.
' ***********************************************************
010.
strPath = Wscript.ScriptFullName
011.
Set
objFile = Fso.GetFile( strPath )
012.
strBackupFolder = Fso.GetParentFolderName( objFile )
013.
014.
' ***********************************************************
015.
' バックアップ対象ディレクトリの取得
016.
' ***********************************************************
017.
' ① 省略すると、ルートはデスクトップ
018.
Set
objFolder = Shell.BrowseForFolder( 0,
"バックアップするフォルダを選択してください"
, &H4B )
019.
020.
' ② 文字列による直接指定
021.
' strRoot = "c:\"
022.
' Set objFolder = Shell.BrowseForFolder( 0, "バックアップするフォルダを選択してください", &H4B, strRoot )
023.
024.
' ③ ルートを番号で指定( この場合は C:\Users\username\AppData\Local )
025.
' ※ あまり現実的ではない特殊ディレクトリの選択
026.
' nRoot = &h1c
027.
' Set objFolder = Shell.BrowseForFolder( 0, "バックアップするフォルダを選択してください", &H4B, nRoot )
028.
029.
if objFolder is nothing then
030.
WScript.Quit
031.
end if
032.
if not objFolder.Self.IsFileSystem then
033.
WScript.Echo
"ファイルシステムではありません"
034.
WScript.Quit
035.
end if
036.
037.
strTargetFolder = objFolder.Self.Path
038.
strName = Replace( strTargetFolder,
":"
,
""
)
039.
strName = Replace( strName,
"\", "
_" )
040.
strName = Replace( strName,
" "
,
""
)
041.
strName =
"BK_"
& strName
042.
043.
' ***********************************************************
044.
' スクリプト作成
045.
' ***********************************************************
046.
Set
OutFile = Fso.OpenTextFile( strBackupFolder &
"\" & strName & "
.vbs", 2,
True
)
047.
048.
OutFile.WriteLine
"strName = "
""
& strName &
""
""
049.
OutFile.WriteLine
"strTarget = "
""
& strTargetFolder &
""
""
050.
OutFile.WriteLine
"strBackupFolder = "
""
& strBackupFolder &
""
""
051.
OutFile.Write
"if MsgBox( strTarget & vbCrLf & "
"のバックアップを開始します。よろしいですか? (保存先:"
" & strBackupFolder & "
"\""
& strName &
""
)
""
"
052.
OutFile.WriteLine
", 1 ) = 2 then"
053.
OutFile.WriteLine
" Wscript.Quit"
054.
OutFile.WriteLine
"end if"
055.
056.
OutFile.WriteLine
"Set WshShell = Wscript.CreateObject( "
"WScript.Shell"
" )"
057.
OutFile.Write
"ExecCommand = "
"cmd.exe /C "
""
"xcopy.exe "
""
""
" & strTarget & "
""
""
" "
""
""
" & strBackupFolder & "
"\""
& strName &
""
\
""
""
"
058.
OutFile.WriteLine
" /D /E /C /S /Y & PAUSE"
""
""
""
059.
OutFile.WriteLine
"Call WshShell.Run( ExecCommand )"
060.
061.
OutFile.Close
062.
063.
WScript.Echo
"バックアップスクリプト : "
& strName &
".vbs"
&
" を作成しました"
064.
065.
066.
' ***********************************************************
067.
' ディレクトリ指定用番号
068.
' https://docs.microsoft.com/ja-jp/windows/desktop/api/shldisp/ne-shldisp-shellspecialfolderconstants
069.
' typedef enum {
070.
' ssfALTSTARTUP = 0x1d,
071.
' ssfAPPDATA = 0x1a,
072.
' ssfBITBUCKET = 0x0a,
073.
' ssfCOMMONALTSTARTUP = 0x1e,
074.
' ssfCOMMONAPPDATA = 0x23,
075.
' ssfCOMMONDESKTOPDIR = 0x19,
076.
' ssfCOMMONFAVORITES = 0x1f,
077.
' ssfCOMMONPROGRAMS = 0x17,
078.
' ssfCOMMONSTARTMENU = 0x16,
079.
' ssfCOMMONSTARTUP = 0x18,
080.
' ssfCONTROLS = 0x03,
081.
' ssfCOOKIES = 0x21,
082.
' ssfDESKTOP = 0x00,
083.
' ssfDESKTOPDIRECTORY = 0x10,
084.
' ssfDRIVES = 0x11,
085.
' ssfFAVORITES = 0x06,
086.
' ssfFONTS = 0x14,
087.
' ssfHISTORY = 0x22,
088.
' ssfINTERNETCACHE = 0x20,
089.
' ssfLOCALAPPDATA = 0x1c,
090.
' ssfMYPICTURES = 0x27,
091.
' ssfNETHOOD = 0x13,
092.
' ssfNETWORK = 0x12,
093.
' ssfPERSONAL = 0x05,
094.
' ssfPRINTERS = 0x04,
095.
' ssfPRINTHOOD = 0x1b,
096.
' ssfPROFILE = 0x28,
097.
' ssfPROGRAMFILES = 0x26,
098.
' ssfPROGRAMFILESx86 = 0x30,
099.
' ssfPROGRAMS = 0x02,
100.
' ssfRECENT = 0x08,
101.
' ssfSENDTO = 0x09,
102.
' ssfSTARTMENU = 0x0b,
103.
' ssfSTARTUP = 0x07,
104.
' ssfSYSTEM = 0x25,
105.
' ssfSYSTEMx86 = 0x29,
106.
' ssfTEMPLATES = 0x15,
107.
' ssfWINDOWS = 0x24
108.
' } ShellSpecialFolderConstants;
109.
' ***********************************************************
関連する Microsoft ドキュメント Shell Reference Shell Objects for Scripting and Microsoft Visual Basic Shell object Shell.BrowseForFolder method