1

以下のスクリプトを使用して、すべての特定のファイルを宛先フォルダーに移動します。ファイルを複製せずに宛先フォルダーにコピーしたい。

10 分ごとに VBS を実行するようにスケジュールするので、フォルダーに既に存在する同じファイルを再度コピーする必要はありません。

Set fso = CreateObject("Scripting.FileSystemObject")

testfolder = "D:\env"
'fso.CreateFolder(testfolder)

MoveFiles fso.GetFolder("D:\Movie Keys\License\2013_Apr_19")

Sub MoveFiles(fldr)
    For Each f In fldr.Files
        basename  = fso.GetBaseName(f)
        extension = fso.GetExtensionName(f)

        If LCase(extension) = "env" Then
            dest  = fso.BuildPath(testfolder, f.Name)
            count = 0
            Do While fso.FileExists(dest)
                count = count + 1
                dest  = fso.BuildPath(testfolder, basename & "_" & count & "." _
                        & extension)
            Loop
            f.Move dest
        End If
    Next

    For Each sf In fldr.SubFolders
        MoveFiles sf
    Next
End Sub
4

2 に答える 2

1

重複を作成せず、宛先に既に存在するファイルをコピーせずにフォルダーを同期する場合は、単に次を使用しますrobocopy

robocopy "D:\Movie Keys\License\2013_Apr_19" "D:\env" *.env

またはスクリプトで:

@echo off

set dst=D:\env
set src=D:\Movie Keys\License\2013_Apr_19

robocopy "%src%" "%dst%" *.env

編集:ソースツリーを目的のフォルダにマングルしたいのでrobocopy、あなたの場合はうまくいきません。既存のコードはあなたが望むものに近いですが、既存のファイルを上書きしたくないし、「バージョン管理された」コピーを作成したくないので、これを変更する必要があります:

count = 0
Do While fso.FileExists(dest)
    count = count + 1
    dest  = fso.BuildPath(testfolder, basename & "_" & count & "." _
            & extension)
Loop
f.Move dest

これに:

If Not fso.FileExists(dest) Then f.Move dest

拡張子に応じてさまざまな宛先フォルダーを使用するには、辞書を使用して宛先パスを保存できます。

Set testfolder = CreateObject("Scripting.Dictionary")
testfolder.CompareMode = vbTextCompare  'case-insensitive
testfolder.Add "env", "D:\env"
testfolder.Add "key", "D:\key"

次のようにコードを変更します。

If testfolder.Exists(extension) Then
  dest  = fso.BuildPath(testfolder(extension), f.Name)
  If Not fso.FileExists(dest) Then f.Move dest
End If
于 2013-04-19T08:46:42.280 に答える