VBScript для копирования файлов, начинающихся с XXX, YYY или ZZZ, из каталога A в каталог B.

У меня почти нулевые знания о сценариях vbs, но мне удалось собрать несколько вместе, чтобы скопировать файлы из одного каталога в другой и удалить файлы в каталоге, но я не смог найти ничего конкретно, что мне сейчас нужно.

Я хочу написать сценарий vbs, чтобы сделать следующее: скопировать файлы, начинающиеся с XXX, YYY или ZZZ, из каталога A в каталог B.

Я осмотрелся и не могу найти то, что ищу, все они кажутся слишком сложными для того, что мне нужно, и включают последнюю дату или анализ строки в файлах и т. д.

Я совершенно уверен, что это просто, но, как указано выше, я действительно не знаю, что делаю, поэтому любая помощь будет принята с благодарностью.

Ниже приведено то, что у меня есть для копирования всех файлов из одного каталога в другой с индикатором выполнения, поэтому было бы здорово внести поправку в это.

Const FOF_CREATEPROGRESSDLG = &H0&

' copy test 1 to test 2
strTargetFolder = "C:\test2\" 
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(strTargetFolder) 
objFolder.CopyHere "C:\test1\*.*", FOF_CREATEPROGRESSDLG

person unlucky    schedule 21.10.2014    source источник


Ответы (2)


Пока не уверен, как получить это в одном большом индикаторе прогресса. В настоящее время он будет показывать прогресс для каждого отдельного файла.

Const FOF_CREATEPROGRESSDLG = &H0&

strSourceFolder = "C:\test1\"
strTargetFolder = "C:\test2\" 

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objSourceFolder = objFSO.GetFolder(strSourceFolder)
Set objFiles = objSourceFolder.Files

Set objShell = CreateObject("Shell.Application")
Set objTargetFolder = objShell.NameSpace(strTargetFolder)

For Each objSingleFile in objFiles
    If (InStr(1,objSingleFile.Name,"xxx",vbTextCompare) = 1) Or _
            (InStr(1,objSingleFile.Name,"yyy",vbTextCompare) = 1) Or _
            (InStr(1,objSingleFile.Name,"zzz",vbTextCompare) = 1) Then
        ' The file name starts with one the flagged keywords
        objTargetFolder.CopyHere objSingleFile.Path, FOF_CREATEPROGRESSDLG
    End If
Next

Сохраните свой код strTargetFolder, который используется для фактической процедуры копирования, используемой в конце сценария. Используя FileSystemObject objFSO, мы перебираем все файлы каталога c:\test1. Затем проверяется имя каждого файла, чтобы увидеть, начинается ли оно с одной из трех разных строк. Сравнение выполняется с использованием vbTextCompare, который, по сути, работает без учета регистра. Если совпадение найдено, то, используя исходный код, скопируйте файл в целевой каталог с прогрессом.

В настоящее время это не будет рекурсивно перемещаться по всем подпапкам для файла, но вы можете сделать для этого рекурсивную функцию.

person Matt    schedule 22.10.2014

Используйте FileSystemObject в сочетании с регулярным выражением:

src = "C:\test1"
dst = "C:\test2" 

Set fso = CreateObject("Scripting.FileSystemObject")

Set re = New RegExp
re.Pattern = "^(XXX|YYY|ZZZ)"

For Each f In fso.GetFolder(src).Files
  If re.Test(f.Name) Then f.Copy dst & "\"
Next
person Ansgar Wiechers    schedule 22.10.2014