ColorationStyle

WSHファイルコピーサンプルスクリプト

WSHファイルコピーサンプルスクリプト

WSHで指定したフォルダ配下のファイルをすべてコピーするサンプルスクリプトです。
コピー先に同一ファイル名があった場合は日時でリネームしてバックアップを取ります。

Option Explicit
'===============================================================================
' ファイルコピー
'===============================================================================

' 定数
Const cstrPathDelimiter    = "\\"         ' パス区切り文字

'===============================================================================
' メイン処理
'===============================================================================
Main
Sub Main
    Dim objFileSys  ' ファイルシステムオブジェクト
    Dim strFromDir  ' コピー元フォルダ
    Dim strToDir    ' コピー先フォルダ
    Dim blnRet      ' 戻値

    Set objFileSys = WScript.CreateObject("Scripting.FileSystemObject")

    ' 引数の取得
    If Wscript.Arguments.Count < 2 then
        WScript.Echo "使用法:" & WScript.ScriptName & " コピー元フォルダ コピー先フォルダ"
        WScript.Echo "指定したフォルダの内容をコピーします。"
        WScript.Echo "コピー先に同名のファイルが存在した場合は、_日付_時刻の形式でバックアップします。"
        Exit Sub
    End If

    strFromDir = Wscript.Arguments.item(0)
    strToDir = Wscript.Arguments.item(1)

    ' フォルダの有無確認
    If objFileSys.FolderExists(strFromDir) = False Then
        WScript.Echo "フォルダ[" & strFromDir & "]は存在しません。"
        Exit Sub
    End If

    If objFileSys.FolderExists(strToDir) = False Then
        WScript.Echo "フォルダ[" & strToDir & "]は存在しません。"
        Exit Sub
    End If

    WScript.Echo strFromDir & " " & strToDir
    blnRet = fncCopyFile(strFromDir, strToDir)

End Sub

'===============================================================================
' 全ファイルコピー
'===============================================================================
Function fncCopyFile(strFromDir, strToDir)
    Dim objFileSys        ' ファイルシステムオブジェクト
    Dim objFolder         ' フォルダオブジェクト
    Dim objSubFolder      ' フォルダオブジェクト
    Dim objFile           ' ファイルオブジェクト
    Dim strToFolderName   ' コピー先フォルダ名
    Dim strToFileName     ' コピー先ファイル名
    Dim blnRet            ' 戻り値

    Set objFileSys = WScript.CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFileSys.GetFolder(strFromDir)

    ' フォルダリスト取得
    For Each objSubFolder In objFolder.SubFolders
        WScript.Echo objSubFolder.Name  ' debug

        strToFolderName = strToDir & cstrPathDelimiter & objSubFolder.Name

        ' コピー先のフォルダ有無確認
        If objFileSys.FolderExists(strToFolderName) = False Then
            objFileSys.CreateFolder(strToFolderName)
        End If

        blnRet = fncCopyFile(strFromDir & cstrPathDelimiter & objSubFolder.Name, strToFolderName)
    Next

    ' ファイルリスト取得
    For Each objFile In objFolder.Files
        WScript.Echo objFile.Name

        ' コピー先のファイル有無確認
        strToFileName = strToDir & cstrPathDelimiter & objFile.Name
        If objFileSys.FileExists(strToFileName) = True Then
            ' 存在する場合リネーム
            Call objFileSys.MoveFile(strToFileName, strToFileName & "_" & Replace(Date(), "/", "") & "-" & Replace(Time(), ":", ""))
        End If

        ' ファイルをコピー
        Call objFileSys.CopyFile(strFromDir & cstrPathDelimiter & objFile.Name, strToFileName)
    Next

    fncCopyFile = true
End Function