05. oktober 2000 - 17:12Der er
27 kommentarer og 2 løsninger
\"Command$\"
Hvordan for jeg lavet \"D:\\TEST\\NYTEKS~1.TXT\" om til \"D:\\Test\\Ny Tekstdokument.txt\" jeg bruger \"Command$\".
hvis jeg skriver D:\\Test\\Project1.exe D:\\Test\\Ny Tekstdokument.txt i kør så virker det fint, men hvis jeg trækker \"Ny Tekstdokument.txt\" over \"Project1.exe\" så for jeg \"D:\\TEST\\NYTEKS~1.TXT\" ud af det,
hvis det kun er det fulde filnavn, du skal bruge, er det her en (lidt primitiv) metode:
Set fso = CreateObject(\"Scripting.FileSystemObject\")
Set dropfil = fso.GetFile(Command$) Set Folder = fso.GetFolder(dropfil.ParentFolder) For Each fil In Folder.Files If fil.ShortName = dropfil.ShortName Then MsgBox fil.Path End If Next fil
Hvis du også har brug for det fulde foldernavn, skal der lidt mere til.
Private Function LongPath(path As String) As String Dim folder1 As Folder Dim folder2 As Folder Dim folder3 As Folder Dim fil1 As File Dim fil2 As File
If fso.DriveExists(path) Then LongPath = path ElseIf fso.FolderExists(path) Then Set folder1 = fso.GetFolder(path) Set folder2 = fso.GetFolder(folder1.ParentFolder) For Each folder3 In folder2.SubFolders If folder3.ShortName = folder1.ShortName Then LongPath = fso.BuildPath(LongPath(folder2.path), folder3.Name) Exit For End If Next folder3 ElseIf fso.FileExists(path) Then Set fil1 = fso.GetFile(path) Set folder1 = fso.GetFolder(fil1.ParentFolder) For Each fil2 In folder1.Files If fil2.ShortName = fil1.ShortName Then LongPath = fso.BuildPath(LongPath(folder1.path), fil2.Name) Exit For End If Next fil2 Else \' Bør ikke kunne ske Err.Raise vbObjectError + 1000, \"LongPath\", path & \" er hverken fil, folder eller drev\" End If
End Function Private Sub Command1_Click()
Set fso = CreateObject(\"Scripting.FileSystemObject\") MsgBox LongPath(Command$) Set fso = Nothing End Sub
Nej jeg satte Private fso As Scripting.FileSystemObject ind det skulle værere Set fso = CreateObject(\"Scripting.FileSystemObject\") fejlen er der indnu
fejl i linje: Private fso As Scripting.FileSystemObject
og slet de rådne Dim\'s .. de skal IKKE bruges! Og du kan ikke Dim\'me As Folder eller As File med mindre Folder og File er en bruger defineret data type.
Hvis jeg skriver \"Project1.exe D:\\Test\\Ny mappe\\Ny mappe\\Ny mappe\\Ny mappe\\Ny mappe\\Ny mappe\\Ny Tekstdokument.txt\" så vil jeg få error i linje: [Err.Raise vbObjectError + 1000, \"LongPath\", path & \" er hverken fil, folder eller drev\" ] men jeg har lavet om på scripet så ser det sådan ud og nu for jeg hele stigen
Private Function LongPath(path As String) As String Set fso = CreateObject(\"Scripting.FileSystemObject\") If fso.DriveExists(path) Then LongPath = path ElseIf fso.FolderExists(path) Then Set folder1 = fso.GetFolder(path) Set folder2 = fso.GetFolder(folder1.ParentFolder) For Each folder3 In folder2.SubFolders If folder3.ShortName = folder1.ShortName Then LongPath = fso.BuildPath(LongPath(folder2.path), folder3.Name) Exit For End If Next folder3 ElseIf fso.FileExists(path) Then Set fil1 = fso.GetFile(path) Set folder1 = fso.GetFolder(fil1.ParentFolder) For Each fil2 In folder1.Files If fil2.ShortName = fil1.ShortName Then LongPath = fso.BuildPath(LongPath(folder1.path), fil2.Name) Exit For End If Next fil2 Else LongPath = path End If End Function
Private Sub Form_Load() On Error Resume Next MsgBox LongPath(Command$) Set fso = Nothing End Sub
ja jeg kan godt se at der sår 0 Point ved dig, men jeg er nesten sikker på at jeg skræv 60 i bægge boxe, Kan du ikke huske vor mange point du havde. ellers må du have dem tilgode.
Bare rolig .. det var ikke sådan ment.. jeg tænkte nok det var en fejl i fordelingen da der STOD at jeg havde fået 0 point. Havde der stået afvist så kunne jeg se at du ikke VILLE have givet mig point.
>det kan godt være \"reference\" hvordan laver jeg en reference ?
I VB: Vælg menuen *Project* Vælg menupunktet *References...*
Under *Available References:* finder du *Microsoft Scripting Runtime* (Scrrun.dll) og giver den et flueben.
Så har du adgang til objekterne FileSystemObject, File, Folder, Drive m.fl. mens du skriver koden. Du kan erklære dem explicit (Dim fso as FileSystemObject) og få hjælp til metoder og parametre.
Du kan også lade være med at erklære noget. Så gætter VB sig frem, og opretter objecter og varianter efter behov. Du får du ikke nogen syntakshjælp og koden kører langsommere.
> Set fso = CreateObject(\"Scripting.FileSystemObject\") >så opretter du en reference.
Det er ikke det, jeg mener, når jeg skriver \'sæt en reference\'.
Som jeg har beskrevet ovenfor, er det noget du gør i VB-udviklingsmiljøet - du angiver, at du vil bruge de objekter, der findes i scrrun.dll.
I VBscript kan du ikke dim\'e variabler med deres type. Det kan du godt i VB, og derfor får du kun syntakshjælp, når du eksplicit skriver \'dim fso as filesystemobject\'. Og medmindre du har sat en reference i udviklingsmiljøet, får du en kompileringsfejl, som sjh beskriver ovenfor: >----------------------------- >Compile error: >User-defined type not defined >-----------------------------
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.