【VBScript】フォルダをコピーする方法


この記事はプロモーションを含みます。

VBScript

ホーム > VBScript 逆引きリファレンス

VBScriptでは「FileSystemObject」を使用することで様々なファイル操作を行えます。
ここでは、フォルダをコピーする方法を解説します。

構文

CopyFolderメソッドの書式になります。

Object.CopyFolder(source, destination, [overwrite])
ファイルシステムオブジェクト.CopyFolder(コピー元のフォルダ, コピー先のフォルダ, 上書き可否)

引数内容省略
コピー元のフォルダ(source)コピーするフォルダ。ワイルドカードも使用可能不可
コピー先のフォルダ(destination)コピー先不可
上書き可否(overwrite)既存のフォルダーが存在する場合に上書きするかどうか
True:上書きする(既定値)
False:上書きしない
可能

使用例

シンプルなコピー

一番単純にフォルダをコピーする例になります。

スクリプト

Option Explicit

' 宣言
Dim fso, fromPath, toPath

' ファイルシステムオブジェクトの作成
Set fso = CreateObject("Scripting.FileSystemObject")

' コピー元のパス
fromPath = "C:\workspace\VBScript\folder1\subFolder"

' コピー先のパス
toPath = "C:\workspace\VBScript\folder2\"

' フォルダのコピー
fso.CopyFolder fromPath, toPath

解説

このスクリプトを実行すると、
変数[fromPath]に設定した「C:\workspace\VBScript\folder1\subFolder」が、
変数[toPath]に設定した「C:\workspace\VBScript\folder2\」配下にコピーされます。

ここで注意すべき点が、コピー先として指定するフォルダパスの最後に「\」を付ける必要があります。「\」が無い場合、後述するフォルダのリネームコピーとなり、想定しているコピーと異なる動きになってしまいます。

コピーを行う前後でフォルダ(ファイル)は下記のようになります。
コピー元の「folder1」は変わらず、コピー先の「folder2」配下に「folder1」配下にあった「subFolder」がコピーされていることが分かります。

このスクリプトでは、「上書き可否」を設定していないため、既定値の「True」になっています。なので、コピー元が変更されない限り、何度実行しても同じようにコピーが行われます。

コピー前

C:\workspace\VBScript\folder1
C:\workspace\VBScript\folder1\subFolder
C:\workspace\VBScript\folder1\subFolder\新しいテキスト ドキュメント.txt

C:\workspace\VBScript\folder2

コピー後

C:\workspace\VBScript\folder1
C:\workspace\VBScript\folder1\subFolder
C:\workspace\VBScript\folder1\subFolder\新しいテキスト ドキュメント.txt

C:\workspace\VBScript\folder2
C:\workspace\VBScript\folder2\subFolder
C:\workspace\VBScript\folder2\subFolder\新しいテキスト ドキュメント.txt

フォルダ名をリネームしつつコピー

フォルダ名をリネームしつつコピーする例です。

スクリプト

Option Explicit

' 宣言
Dim fso, fromPath, toPath

' ファイルシステムオブジェクトの作成
Set fso = CreateObject("Scripting.FileSystemObject")

' コピー元のパス
fromPath = "C:\workspace\VBScript\folder1"

' コピー先のパス
toPath = "C:\workspace\VBScript\folder2"

' フォルダのコピー
fso.CopyFolder fromPath, toPath

解説

このスクリプトを実行すると、
変数[fromPath]に設定した「C:\workspace\VBScript\folder1」が、
変数[toPath]に設定した「C:\workspace\VBScript\folder2」にリネームされてコピーされます。

コピーを行う前後でフォルダ(ファイル)は下記のようになります。
コピー元の「folder1」は変わらず、元々存在しなかった「folder2」が作成されて、その中は「folder1」と同じになっていることが分かります。

このスクリプトでは、「上書き可否」を設定していないため、既定値の「True」になっています。なので、コピー元が変更されない限り、何度実行しても同じようにコピーが行われます。

コピー前

C:\workspace\VBScript\folder1
C:\workspace\VBScript\folder1\subFolder
C:\workspace\VBScript\folder1\subFolder\新しいテキスト ドキュメント.txt

コピー後

C:\workspace\VBScript\folder1
C:\workspace\VBScript\folder1\subFolder
C:\workspace\VBScript\folder1\subFolder\新しいテキスト ドキュメント.txt

C:\workspace\VBScript\folder2
C:\workspace\VBScript\folder2\subFolder
C:\workspace\VBScript\folder2\subFolder\新しいテキスト ドキュメント.txt

ワイルドカードを使用してコピー

コピー元のフォルダ名をワイルドカードで指定しつつコピーする例です。

スクリプト

Option Explicit

' 宣言
Dim fso, fromPath, toPath

' ファイルシステムオブジェクトの作成
Set fso = CreateObject("Scripting.FileSystemObject")

' コピー元のパス
fromPath = "C:\workspace\VBScript\folder1\subFolder_*"

' コピー先のパス
toPath = "C:\workspace\VBScript\folder2\"

' フォルダのコピー
fso.CopyFolder fromPath, toPath

解説

このスクリプトを実行すると、
変数[fromPath]に設定した「C:\workspace\VBScript\folder1」配下にある「subFolder_*」(フォルダ名の先頭が[subFolder_]となっているフォルダ)が、変数[toPath]に設定した「C:\workspace\VBScript\folder2\」配下にコピーされます。

コピーを行う前後でフォルダ(ファイル)は下記のようになります。
コピー元の「folder1」は変わらず、「folder1」の中にある「subFolder_」から始まるフォルダのみが「folder2」配下にコピーされていることが分かります。

コピー前

C:\workspace\VBScript\folder1
C:\workspace\VBScript\folder1\smpFolder_100
C:\workspace\VBScript\folder1\smpFolder_100\新しいテキスト ドキュメント.txt
C:\workspace\VBScript\folder1\smpFolder_aa
C:\workspace\VBScript\folder1\smpFolder_aa\新しいテキスト ドキュメント.txt
C:\workspace\VBScript\folder1\subFolder_01
C:\workspace\VBScript\folder1\subFolder_01\新しいテキスト ドキュメント.txt
C:\workspace\VBScript\folder1\subFolder_zzz
C:\workspace\VBScript\folder1\subFolder_zzz\新しいテキスト ドキュメント.txt

C:\workspace\VBScript\folder2

コピー後

コピー前と変わらないので省略

C:\workspace\VBScript\folder2
C:\workspace\VBScript\folder2\subFolder_01
C:\workspace\VBScript\folder2\subFolder_01\新しいテキスト ドキュメント.txt
C:\workspace\VBScript\folder2\subFolder_zzz
C:\workspace\VBScript\folder2\subFolder_zzz\新しいテキスト ドキュメント.txt

上書き可否にFalseを指定してコピー

第三引数の上書き可否に「False」を設定してコピーする例です。
(第三引数に「False」を指定すると、上書き禁止となります。)

スクリプト

Option Explicit

' 宣言
Dim fso, fromPath, toPath

' ファイルシステムオブジェクトの作成
Set fso = CreateObject("Scripting.FileSystemObject")

' コピー元のパス
fromPath = "C:\workspace\VBScript\folder1"

' コピー先のパス
toPath = "C:\workspace\VBScript\folder2"

' フォルダのコピー
fso.CopyFolder fromPath, toPath, False

解説

このスクリプトを実行すると、
変数[fromPath]に設定した「C:\workspace\VBScript\folder1」が、
変数[toPath]に設定した「C:\workspace\VBScript\folder2」にリネームされてコピーされます。

このサンプルでは、第三引数が「False」となっており、上書き禁止です。
なので、2回目の実行時には、「既に同名のファイルが存在しています。」とエラーが表示されます。

コピーを行う前後でフォルダ(ファイル)は下記のようになります。
コピー元の「folder1」は変わらず、元々存在しなかった「folder2」が作成されて、その中は「folder1」と同じになっていることが分かります。

コピー前

C:\workspace\VBScript\folder1
C:\workspace\VBScript\folder1\subFolder
C:\workspace\VBScript\folder1\subFolder\新しいテキスト ドキュメント.txt

コピー後

C:\workspace\VBScript\folder1
C:\workspace\VBScript\folder1\subFolder
C:\workspace\VBScript\folder1\subFolder\新しいテキスト ドキュメント.txt

C:\workspace\VBScript\folder2
C:\workspace\VBScript\folder2\subFolder
C:\workspace\VBScript\folder2\subFolder\新しいテキスト ドキュメント.txt

コメント

タイトルとURLをコピーしました