VBScript で以下の機能を実現しました
- 手動で三つのフォルダを指定することができます。
- 1つ目のファイルをベースとして二つ目のフォルダを検索し、二つ目フォルダに同階層同名のファイルがある場合、三つ目のフォルダにコピーします。
- コピー先のフォルダが存在しない場合、新規作成します。
詳細
以下の VBScript コードを使用して、フォルダ間でファイルをコピーできます:
Option Explicit
Dim Folder1, Folder2, Folder3
Folder1 = InputBox("フォルダ1のパスを入力してください。", "フォルダ1のパス") ' ユーザーにフォルダ1のパスを入力させる
Folder2 = InputBox("フォルダ2のパスを入力してください。", "フォルダ2のパス") ' ユーザーにフォルダ2のパスを入力させる
Folder3 = InputBox("フォルダ3のパスを入力してください。", "フォルダ3のパス") ' ユーザーにフォルダ3のパスを入力させる
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.FolderExists(Folder1) Then
MsgBox "フォルダ1が存在しません"
WScript.Quit
End If
If Not objFSO.FolderExists(Folder2) Then
MsgBox "フォルダ2が存在しません"
WScript.Quit
End If
If Not objFSO.FolderExists(Folder3) Then
objFSO.CreateFolder(Folder3)
End If
ProcessFolder objFSO.GetFolder(Folder1)
MsgBox "操作が完了しました"
Set objFSO = Nothing
Sub ProcessFolder(ByVal objFolder)
Dim objFile, objSubFolder, targetFile, targetFolder
For Each objFile In objFolder.Files
targetFile = Replace(objFile.Path, Folder1, Folder2)
targetFolder = Replace(objFile.ParentFolder.Path, Folder1, Folder3)
If objFSO.FileExists(targetFile) Then
If Not objFSO.FolderExists(targetFolder) Then
objFSO.CreateFolder(targetFolder)
End If
objFSO.CopyFile targetFile, targetFolder & "\" & objFile.Name, True
End If
Next
For Each objSubFolder In objFolder.SubFolders
targetFolder = Replace(objSubFolder.Path, Folder1, Folder3)
If Not objFSO.FolderExists(targetFolder) Then
objFSO.CreateFolder(targetFolder)
End If
ProcessFolder objSubFolder
Next
End Sub
```vb