Avatar billede praem Nybegynder
02. oktober 2008 - 11:23 Der er 5 kommentarer

Opret folder og flytte filer

Hej Eksperter,

Er der nogen der kan hjælpe mig her? Jeg vil gerne have flyttet en brugers Foretrukne ud på hans homeshare i en mappe der måske ikke er oprettet..

Her er hvad jeg har.. Men den fejler. Jeg har på fornemmelsen at der er fordi den ikke kan finde brugerens H-drev, men hvad siger i? I stedet for H-drev.. kan man så skrive %homeshare% eller noget i den stil?

Det skal lige siges at jeg

Option Explicit
' On Error Resume Next

Const HKEY_CURRENT_USER = &H80000001

Dim strComputer
Dim objRegistry
Dim strKeyPath
Dim strValueName
Dim strValue
Dim wsh
Dim Profile
Dim filesys
Dim fs
Dim StrFolder
Dim objFSO

strFolder = "H:\Bruger Data\"

set objFSO = createobject("Scripting.FileSystemObject")

if objFSO.FolderExists(strFolder) = False then
    objFSO.CreateFolder strFolder

end if

strComputer = "."

Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

'Set Expandable String value
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
strValueName = "Favorites"
strValue = "H:\Bruger Data\Foretrukne"
objRegistry.SetExpandedStringValue HKEY_CURRENT_USER,strKeyPath,strValueName,strValue

Set objRegistry = Nothing

set wsh = createobject("WScript.Shell")
Set fs = CreateObject("Scripting.FileSystemObject")
profile = wsh.ExpandEnvironmentStrings("%UserProfile%")

set wsh = createobject("WScript.Shell")
profile = wsh.ExpandEnvironmentStrings("%UserProfile%")

set filesys = CreateObject("Scripting.FileSystemObject")
If filesys.FolderExists("H:\Foretrukne\") Then
    filesys.CopyFolder profile & "\Foretrukne", "H:\Bruger Data\Foretrukne"
else
    filesys.createfolder("H:\Foretrukne")
    filesys.CopyFolder profile & "\Foretrukne", "H:\Bruger Data\Foretrukne"
end if




Håber nogen kan/vil hjælpe...

/Praem
Avatar billede collin Nybegynder
04. oktober 2008 - 09:35 #1
'Hvis du bruger den 'SpecialFolders property' kan du spring alle de trin over der har at gøre med at
'fastsætte stien til brugerens profil og hans/hendes Foretrukne mappe. Du behøver faktisk ikke
'flere linjer kode end dem her i en vbs fil. Jeg har ikke et hjemmenetværk så jeg har kunne teste om
'den også ville kunne finde et H: drev som ligger på et netværk ( har jeg forstået det rigtigt at det er det det er?)
'Jeg kan dog ikke forestille mig at det ikke skulle virke.


    Set oShell = CreateObject("WScript.Shell")
    Set Fso = CreateObject("Scripting.FileSystemObject")

    FPath = oShell.SpecialFolders("Favorites")

        If(fso.FolderExists("H:\Bruger Data\Foretrukne")) Then
        Else
        Fso.CreateFolder("H:\Bruger Data\Foretrukne")
        end if

    Fso.CopyFolder FPath, "H:\Bruger Data\Foretrukne"

Håber det kan hjælpe...
Avatar billede collin Nybegynder
04. oktober 2008 - 10:44 #2
Årrgh! Undskyld. Der er en lille fejl her, jeg har overset. Kommandoen 'CreateFolder' kan kun oprette en led ad gangen i stien. Så hvis mappen 'H:\Bruger Data' ikke eksisterer så får man en fejlmelding hvis man forsøger med 'Fso.CreateFolder("H:\Bruger Data\Foretrukne\")' Først skal man oprette 'H:\Bruger Data' så dernæst 'H:\Bruger Data\Foretrukne'

således:



    Set oShell = CreateObject("WScript.Shell")
    Set Fso = CreateObject("Scripting.FileSystemObject")

    FPath = oShell.SpecialFolders("Favorites")

        If(fso.FolderExists("H:\Bruger Data")) Then
        Else
        Fso.CreateFolder("H:\Bruger Data")
        end if

        If(fso.FolderExists("H:\Bruge Data\Foretrukne\")) Then
        Else
        Fso.CreateFolder("H:\Bruger Data\Foretrukne\")
        end if

    Fso.CopyFolder FPath, "H:\Bruger Data\Foretrukne"
Avatar billede praem Nybegynder
14. oktober 2008 - 09:05 #3
Hej Collin,

Takker... H:\drevet er brugerens homeshare. Kan man ikke skrive %EtEllerAndet% istedet for H:\ %homeshare% måske?

/Praem
Avatar billede collin Nybegynder
19. oktober 2008 - 00:39 #4
Det tror jeg ikke - desværre.
Avatar billede Slettet bruger
07. april 2009 - 11:56 #5
%EtEllerAndet% er en windows miljøvariabel og kan sættes individuelt for maskine til maskine og måske for brugerprofiler.
Hvis miljøvariable ud over dem der er som standard skal bruges, skal du nok enten oprette den i dit script før alt det andet, eller undgå at bruge alternative miljøvariable som du ikke er sikker på eksisterer på en standard-installation af windows xp/Vista.

Jeg har siddet og fiflet med et lille script, der udfører det du spørger om.
Jeg ved ikke præcis hvilken mappe på serveren hver bruger får mappet som sit h-drev, så jeg er gået ud fra at det er brugerens hjemmemappe - altså noget i stil med en mappe der hedder det samme som brugerens brugernavn.

Der laves tjek på om h-drevet er mappet fra start og det mappes hvis det ikke er der.
Der tjekkes på om de forskellige mapper eksisterer og de oprettes hvis de ikke eksisterer.
Min foretrukne hedder favorites da jeg bruger en engelsk XP, men dette kan jo rettes.

Her kommer scriptet:

Option Explicit
Const strServer = "\\Server-Name\"
Const strDriveLetter = "H:"
Const strRemoteFolderPath = "\Bruger Data\"
Const strTargetFolder = "Foretrukne"
Dim wshShell, strLokalFolderPath, objFSO, colDrives, objDiskDrive, bolDrivePresent, objNetwork, strUsername

Set wshShell = CreateObject("WScript.Shell")
strLokalFolderPath = wshShell.ExpandEnvironmentStrings("%USERPROFILE%") & "\Favorites"
Set wshShell = Nothing

Set objFSO = CreateObject("Scripting.FileSystemObject")

' Tjek om H-drevet er mappet
bolDrivePresent = False
Set colDrives = objFSO.Drives
For Each objDiskDrive In colDrives
    If objDiskDrive.DriveLetter = Left(strDriveLetter, 1) Then
        bolDrivePresent = True
        Exit For
    End If
Next
Set colDrives = Nothing

' Map drevet hvis det ikke blev fundet
If Not bolDrivePresent Then
    Set objNetwork = WScript.CreateObject("WSCript.Network")
    strUsername = objNetwork.UserName
    On Error Resume Next
        objNetwork.MapNetworkDrive strDriveLetter, strServer & strUsername
    On Error GoTo 0
    Set objNetwork = Nothing
End If

' Tjek om de respektive mapper eksisterer - Opret dem hvis de ikke gør
If objFSO.FolderExists(strLokalFolderPath) Then
    If Not objFSO.FolderExists(strDriveLetter & strRemoteFolderPath) Then
        On Error Resume Next
            objFSO.CreateFolder strDriveLetter & strRemoteFolderPath
            If Not objFSO.FolderExists(strDriveLetter & strRemoteFolderPath & strTargetFolder) Then
                objFSO.CreateFolder strDriveLetter & strRemoteFolderPath & strTargetFolder
            End If
        On Error GoTo 0
    End If
   
    ' Kopier foretrukne til netværkshare
    On Error Resume Next
        objFSO.CopyFolder strLokalFolderPath, strDriveLetter & strRemoteFolderPath & strTargetFolder, True
    On Error GoTo 0
End If

Håber det stadig kan bruges...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester