1) ディレクトリ選択でバックアップするフォルダを決定 2) カレント(このスクリプトを実行したフォルダ)にスクリプトが作成されます 3) 新しいスクリプトを実行 4) カレントにバックアップ用のフォルダが作成されます 5) バックアップするフォルダ内をそのフォルダ内に全てコピーします ▼ 実行時に表示されるフォルダ選択
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 )
' A 文字列による直接指定
' strRoot = "c:\"
' Set objFolder = Shell.BrowseForFolder( 0, "バックアップするフォルダを選択してください", &H4B, strRoot )
' B ルートを番号で指定( この場合は 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;
' ***********************************************************
更新履歴 2009-06-28 : 記事作成 2013-04-02 : ダウンロード追加 2015-08-07 : ダウンロードを zip 化( Google Chrome 対応 ) 2018-04-21 : 作成したスクリプト内の保存するフォルダ名を固定化( 変更を容易にするため ) 関連する Microsoft ドキュメント Shell Reference Shell Objects for Scripting and Microsoft Visual Basic Shell object Shell.BrowseForFolder method
|
|
【VBScriptの最新記事】
- 指定した位置でレジストリエディタを開く為の VBScript をダウンロードします
- VBScript(WSH) と PHP(7.3) で氏名をランダムに作成
- VBScript + PowerShell : PowerShell がファイルを開くダイアログで取得したパスをテキストファイル経由で VBScript に戻して使用する
- VBScript : XMLファイルのテキストノードの値の更新
- HTA : 指定したキーでレジストリエディタを開く
- WSH(VBScript) : 指定したキーでレジストリエディタを開く
- VBScript : WEB上のHTMLを使用して、InternetExplorer.Application でパスワード入力を実装する
- VBS : 正規表現で、URL リストの中のドメイン部分のみを取り出す
- 文字列を指定してその名前の変数でオブジェクトを作成する : WEB に VBScript ライブラリ
- 実行中のスクリプトのタイプを知る : WEB に VBScript ライブラリ
- VBS : FileZilla用誰にでも使える拡張子ランチャー






