cHl Security Ответов: 2

Скопируйте файлы папок и подпапок с определенным расширением файла из нескольких местоположений в переменную %appdata% path


Используя Vbscript, я пытаюсь скопировать файлы с определенными расширениями файлов, такими как [.tmp,. dat,. txt], из папки и подпапки в более чем одном месте в %AppData% destination user с повышенными привилегиями. Ниже приведен пример моего кода, который запрашивает Разрешение указано в строке 40 моего кода

' Require variables to be defined
Option Explicit

' Global variables
Dim strBaseFolder
Dim strDestFolder
Dim objFSO      
Dim objFolder
Dim objFile

Dim objWShell
Set objWShell = WScript.CreateObject("WScript.Shell")
Dim homePath
homePath = objWShell.expandEnvironmentStrings("%HOMEPATH%")

' Define folders to work with
strBaseFolder = "C:\"
strDestFolder = homePath + "\AppData\Roaming\Shell32"

' Create filesystem object
Set objFSO = CreateObject("Scripting.FileSystemObject")

' Exit if base folder does not exist
If Not objFSO.FolderExists(strBaseFolder) Then
    Wscript.Echo "Missing base folder : """ & strBaseFolder & """"
    Wscript.Quit
End If

' Exit if dest folder does not exist
If Not objFSO.FolderExists(strDestFolder) Then
    Wscript.Echo "Missing dest folder : """ & strDestFolder & """"
    Wscript.Quit
End If

' Look at each subfolder of base folder
For Each objFolder In objFSO.GetFolder(strBaseFolder).SubFolders
    ' Continue if we want this folder
    If IncludeFolder(objFolder) Then
        ' Check each file in this folder
        For Each objFile In objFolder.Files
            ' Continue if we want this file
            If IncludeFile(objFile) Then
                ' Copy the file
                'Wscript.Echo "Copying File :""" & objFile.Path & """"
                objFile.Copy strDestFolder & "\" & objFile.Name
            End If
        Next
    End If
Next

' Logic to determine if we process a folder
Function IncludeFolder(objFolder)
    ' Exclude certain folder names
    Select Case LCase(objFolder.Name)
        Case "exchange", "hr_daily_terminations", "pay", "terminations", "work folder"
            IncludeFolder = False
        Case Else
            IncludeFolder = True
    End Select
End Function

' Logic to determine if we process a file
Function IncludeFile(objFile)
    IncludeFile = False
    Select Case LCase(objFSO.GetExtensionName(objFile.Path))
        ' Include only these extensions
        Case "txt", "dat", "tmp"
            ' Include only files dated today
            If DateDiff("d", objFile.DateLastModified, Now) = 0 Then
                IncludeFile = True
            End If
    End Select
End Function 


Что я уже пробовал:

Использование Базовой Папки
strBaseFolder = homePath + "\AppData\Local\Temp"

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

Кроме того, когда я попытался объединить mutiple BaseFolder:
strBaseFolder = "C:\"
strBaseFolder = "D:\"
strBaseFolder = homePath + "\AppData\Local\Temp"


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

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

Спасибо!

2 Ответов

Рейтинг:
2

Dave Kreskowiak

У вас нет ничего, что обрабатывало бы ошибки в вашем коде вообще, и ваш код будет сталкиваться с ситуациями, в которых будут возникать ошибки. Одним из прекрасных примеров этого является папка в корне диска под названием "Информация о системном томе". Даже если вы запустите свой код с повышенными правами, у вас не будет доступа к содержимому этой папки. Вы получите "доступ запрещен".

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


cHl Security

Можете ли вы любезно проиллюстрировать свои объяснения или дать мне пример кода?

Dave Kreskowiak

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

Однако вы можете начать читать дальше при ошибке[^].

Рейтинг:
0

phil.o

Откройте командную строку (консоль Windows) и введите echo %HOMEPATH%; вы обнаружите, что эта переменная окружения не включает диск. например, в моей системе она возвращает \Users\Account.
Ты можешь попробовать

strBaseFolder = "C:\" + homePath + "\AppData\Local\Temp"
и посмотрите, решит ли это вашу проблему.


cHl Security

Pls я пытаюсь скопировать из папки c:\ и подпапки, но мне отказано в разрешении.