Avatar billede sjh Nybegynder
05. oktober 2000 - 17:12 Der 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,
Avatar billede tdaugaard Nybegynder
05. oktober 2000 - 17:19 #1
Det er vist ikke muligt med mindre du bruger nogle specielle I/O API kald.

Command$ returnerer blot de parametre som der er blevet overført til programmet, den kan ikke få LFN\'et ud af et SNF.
Avatar billede sjh Nybegynder
05. oktober 2000 - 17:22 #2
hvordan laver man så specielle I/O API

Avatar billede swjensen Nybegynder
05. oktober 2000 - 18:03 #3
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.
Avatar billede sjh Nybegynder
05. oktober 2000 - 23:29 #4
Hvis du kan lave det med fuldstig, \"drev\\folder\\file\" så er der 60 point til dig.
Avatar billede swjensen Nybegynder
06. oktober 2000 - 20:08 #5
Lav en reference til Microsoft Scripting Runtime

Private fso As Scripting.FileSystemObject

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
Avatar billede sjh Nybegynder
06. oktober 2000 - 22:30 #6
Jeg for fejl i linje:

Private fso As Scripting.FileSystemObject
-----------------------------
Compile error:
User-defined type not defined
-----------------------------

det kan godt være \"reference\" hvordan laver jeg en reference ?
Avatar billede tdaugaard Nybegynder
06. oktober 2000 - 22:40 #7
Set fso = CreateObject(\"Scripting.FileSystemObject\")

så opretter du en reference.
Avatar billede tdaugaard Nybegynder
06. oktober 2000 - 22:42 #8
Den linie indsætter du LIGE før

If fso.DriveExists(path) Then

i LongPath funktionen..
Avatar billede sjh Nybegynder
06. oktober 2000 - 23:42 #9
nu for jeg fejl i \"Dim folder1 As Folder\"
Avatar billede sjh Nybegynder
06. oktober 2000 - 23:47 #10
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

Avatar billede tdaugaard Nybegynder
06. oktober 2000 - 23:53 #11
<< sjh  >>

*g* sorry .. slet den linie Private fso..

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.
Avatar billede sjh Nybegynder
07. oktober 2000 - 00:22 #12
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


Tak for hjælpen i for 60 point. ;)
Avatar billede sjh Nybegynder
07. oktober 2000 - 00:23 #13
Jeg glemte point
Avatar billede sjh Nybegynder
07. oktober 2000 - 00:24 #14
Jeg glemte point sådan.
Avatar billede tdaugaard Nybegynder
07. oktober 2000 - 00:27 #15
<< sjh >>
Det er fordi \"Ny Mappe\" indeholder mellemrum.
Du skal nok skrive

Project1.exe \"D:\\Test\\Ny mappe\\Ny mappe\\Ny mappe\\Ny mappe\\Ny mappe\\Ny mappe\\Ny Tekstdokument.txt\"

istedet.

men hvis det virkede så er det jo helt fint.
Avatar billede tdaugaard Nybegynder
07. oktober 2000 - 00:28 #16
Hmm .. der gik vist noget galt med pointene .. eller hvad ?
Avatar billede sjh Nybegynder
07. oktober 2000 - 00:34 #17
hvis jeg trækker filen over Project1.exe kan jeg ikke skrive \"D:\\Test\\Ny mappe\\......\" men det virker fint.

i har fået point det var bare mig der glæmte at Accepter svar. ;)

Avatar billede tdaugaard Nybegynder
07. oktober 2000 - 00:36 #18
Nåå .. nej .. DOH!

Tjaa. . jeg har fået 0 point, men det gør ikke noget.. jeg hjalp jo ikke SÅ meget ..
Avatar billede sjh Nybegynder
07. oktober 2000 - 00:44 #19
Hvis du går ind under Spørgsmål besvaret af mig. så kan du se at du har fået 60 point (\"Command$\")

Avatar billede tdaugaard Nybegynder
07. oktober 2000 - 00:49 #20
Hmm ..wierd ..

swjensen har fået 60 .. prøv at se:

    Accepteret svar fra swjensen
    Point : 60
    05-10 2000 18:03:41

så se min:

    Accepteret svar fra tdaugaard
    Point : 0
    06-10 2000 22:40:28

anyway, det gør ikke noget .. swjensen kom trods alt med selve koden.
Avatar billede sjh Nybegynder
07. oktober 2000 - 00:57 #21
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.
Avatar billede sjh Nybegynder
07. oktober 2000 - 00:59 #22
Det var ikke mening at snyde dig ellers skræv jeg jo ikke: Tak for hjælpen \"i\" for 60 point
Avatar billede tdaugaard Nybegynder
07. oktober 2000 - 01:06 #23
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 er helt i orden.
Avatar billede sjh Nybegynder
07. oktober 2000 - 01:08 #24
Ja det er jo også rigtig. :)
Avatar billede swjensen Nybegynder
07. oktober 2000 - 09:04 #25
>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.

Avatar billede tdaugaard Nybegynder
07. oktober 2000 - 11:41 #26
Først ville du

DIM\'e samtlige varabler AS Folder og File, derefter

SET\'e dem til en reference.

DET er langsommere.

Det lyder da underligt hvis man ikke får syntaxhjælp i VB på et object der er oprettet via Set var = CreateObject(\"class_id\")

det gør man i Visual InterDev i ASP.
Avatar billede swjensen Nybegynder
07. oktober 2000 - 12:24 #27
> 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
>-----------------------------


Avatar billede tdaugaard Nybegynder
07. oktober 2000 - 12:27 #28
Nåå .. på den måde ... sorry :)
Avatar billede swjensen Nybegynder
07. oktober 2000 - 12:56 #29
selv :-)
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

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel