VBSで以下のような処理を作りたいのですが、どのようにすればよいか教えてください。

Visual Basic42閲覧

ベストアンサー

0

返信ありがとうございます。 フォルダB配下の状態をサブフォルダ階層含めて、フォルダA配下の状態と同じにしたいという感じです。 ただし、フォルダを丸ごとコピーではなくフォルダBに存在しないファイルがある場合、そのファイルだけフォルダAからコピーしたいです。 なので、フォルダA配下のサブフォルダ階層ごとで同じファイルが複数存在した場合も、フォルダBのそのサブフォルダ階層に存在しないのであれば、すべてのファイルをコピーしたいと考えています。

ThanksImg質問者からのお礼コメント

再起処理によって求めていた動作をさせることができました。 他の方のご回答もとても参考になりとても迷いましたが、今回は望んでいたVBSをわざわざ作成までしていただいていることもありまして、ベストアンサーにさせていただきました。 皆様本当にありがとうございました。

お礼日時:5/10 0:46

その他の回答(2件)

0

Option Explicit Dim f, fa, fb, so Set so = CreateObject("Scripting.FileSystemObject") Set fa = so.GetFolder("D:\Programming\Copy\フォルダA") fb = "D:\Programming\Copy\フォルダB" For Each f In fa.Files If so.FileExists(fb & "\" & f.Name) = False Then so.CopyFile f, fb & "\" & f.Name, True End If Next Set fa = Nothing Set so = Nothing MsgBox("Finished!") 簡単な説明です。 Set so = CreateObject("Scripting.FileSystemObject") 「Windows」のファイルやフォルダを扱う機能を読み込んでいます。 Set fa = so.GetFolder("D:\Programming\Copy\フォルダA") 「フォルダA」を取得しています。 したがって、この「D:\Programming\Copy\フォルダA」の部分を、実際の質問者の環境に合わせてください。 fb = "D:\Programming\Copy\フォルダB" 「フォルダB」です。 もちろん、こちらも、質問者の環境に合わせてください。 For Each f In fa.Files 「フォルダA」の中のすべてのファイルを1つずつ調べます。 If so.FileExists(fb & "\" & f.Name) = False Then もし、見つかった「フォルダA」の中のファイルが「フォルダB」内に存在しなかったら、 so.CopyFile f, fb & "\" & f.Name, True コピーしています。 End If Next を、ファイルのある限り繰り返します。 Set fa = Nothing Set so = Nothing MsgBox("Finished!") あとは、終了処理で、最後に「Finished!」と表示しています。

ご回答ありがとうございます。 内容をご確認させていただきましたが、この場合だとフォルダA直下のファイルのコピーとなりますかね? フォルダA配下にあるサブフォルダ内のファイル等もチェックしてコピーできるようにできればと思っているのですが、何かいい方法はありますか?

1

過程を無視して結果オーライなら1行で完了です。 CreateObject("Wscript.Shell").Run "cmd /c Robocopy フォルダA フォルダB /E /XC /XN /XO", 0 参考にしたWebページ https://lemon818.com/windows-copy-noname/

1人がナイス!しています

ご回答ありがとうございます。 Robocopyの方法も検討しましたが、可能であれば過程の部分も実装したいと思いますので、もう少し検討したいと思います。