Avatar billede themepark Nybegynder
28. oktober 2003 - 23:31 Der er 29 kommentarer

Nye problemer med GetFolder

<HTML
<HEAD>
<TITLE>Billede Viser ver. 1.0</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="VBScript">
Dim FilSystem, Mappe, Fil
Set FilSystem=CreateObject("Scripting.FileSystemObject")
MsgBox(WScript.Path)
Set Mappe=FilSystem.GetFolder(WScript.Path)
MsgBox(Mappe.Name)
</SCRIPT>
</BODY>
</HTML>

Hvad er der galt med ovenstående kode? Jeg får ingen message boxes :(

Og hvordan skriver man en linje ud i ens HTML dokument med VBScript?
Avatar billede thesurfer Nybegynder
28. oktober 2003 - 23:43 #1
Jeg får fejlen "Error: Object required: 'WScript'", linie 8
Avatar billede medions Nybegynder
29. oktober 2003 - 08:09 #2
sTemp = WScript.ScriptFullName
sScriptPath = Left(sTemp, InStrRev(sTemp, "\")-1)

MsgBox sScriptPath

eller

http://www.devguru.com/technologies/wsh/quickref/wscript_Path.html

//>Rune
Avatar billede themepark Nybegynder
29. oktober 2003 - 15:02 #3
medions...sig mig, hvilke af de 2 spørgsmål er det, du besvarer?
Avatar billede themepark Nybegynder
29. oktober 2003 - 16:04 #4
Jeg er ved at blive lidt forvirret nu :( Jeg har fundet ud af at lige så snart den kommer til

Set FilSystem=CreateObject("Scripting.FileSystemObject")

stopper den af en eller anden grund og udfører ikke resten af dokumentet, derfor kommer der ingen MsgBoxes.

Men hvorfor gør den nu det? Der skal dels siges, at jeg IKKE vil programmere det med ASP, fordi det skal bruges til en lokal computer, hvor hverken PWS eller IIS er installeret. Desuden skal det siges, at filendelsen naturligt nok er .html og ikke .vbs. Men de 2 ting burde vel ikke være et problem...eller?
Avatar billede adam_christensen Nybegynder
29. oktober 2003 - 21:31 #5
Det er præcis dit problem. Du har ikke adgang til WScript-objektet fra en HTML-fil.

Jeg gætter på at du vil lave et eller andet billede-galleri der kan køre i en browser, så hvis jeg var dig ville jeg enten:

1) installere PWS/IIS og lave det i ASP (den lette løsning), eller
2) kode et VBScript, der kan løbe en given folder igennem for fx jpg's og så generere de nødvendige HTML-filer (den lidt sværere)
Avatar billede themepark Nybegynder
29. oktober 2003 - 21:45 #6
Okay...grunden til at jeg bruger WScript er at jeg fik at vide, at jeg skulle bruge det for at få den mappe, som min HTML fil kører fra...men kender du nogle andre måder at gøre det med VBScript?
Avatar billede adam_christensen Nybegynder
29. oktober 2003 - 22:04 #7
window.location.href giver dig den fulde sti+filnavn (URL encoded og præfikset med file:/// hvis det er en lokal fil).
Avatar billede themepark Nybegynder
29. oktober 2003 - 22:05 #8
Men er det ikke JavaScript?
Avatar billede adam_christensen Nybegynder
29. oktober 2003 - 22:07 #9
Her er en URLDecode-funktion lige til at paste ind i din <SCRIPT>-blok:

Function URLDecode(ByVal What)
'URL decode Function
'2001 Antonin Foller, PSTRUH Software, http://www.pstruh.cz
  Dim Pos, pPos

  'replace + To Space
  What = Replace(What, "+", " ")

  on error resume Next
  Dim Stream: Set Stream = CreateObject("ADODB.Stream")
  If err = 0 Then 'URLDecode using ADODB.Stream, If possible
    on error goto 0
    Stream.Type = 2 'String
    Stream.Open

    'replace all %XX To character
    Pos = InStr(1, What, "%")
    pPos = 1
    Do While Pos > 0
      Stream.WriteText Mid(What, pPos, Pos - pPos) + _
        Chr(CLng("&H" & Mid(What, Pos + 1, 2)))
      pPos = Pos + 3
      Pos = InStr(pPos, What, "%")
    Loop
    Stream.WriteText Mid(What, pPos)

    'Read the text stream
    Stream.Position = 0
    URLDecode = Stream.ReadText

    'Free resources
    Stream.Close
  Else 'URL decode using string concentation
    on error goto 0
    'UfUf, this is a little slow method.
    'Do Not use it For data length over 100k
    Pos = InStr(1, What, "%")
    Do While Pos>0
      What = Left(What, Pos-1) + _
        Chr(Clng("&H" & Mid(What, Pos+1, 2))) + _
        Mid(What, Pos+3)
      Pos = InStr(Pos+1, What, "%")
    Loop
    URLDecode = What
  End If
End Function
Avatar billede adam_christensen Nybegynder
29. oktober 2003 - 22:13 #10
Så lykkedes det faktisk:

Dim FilSystem, Mappe, Fil
Set FilSystem=CreateObject("Scripting.FileSystemObject")

sPath = URLDecode(window.location.href)
sPath = Left(sPath, InStrRev(sPath, "/")-1)
If LCase(Left(sPath, 8)) = "file:///" Then
  sPath = Right(sPath, Len(sPath)-8)
End If

MsgBox sPath

Set Mappe=FilSystem.GetFolder(sPath)
MsgBox(Mappe.Name)
Avatar billede themepark Nybegynder
29. oktober 2003 - 22:14 #11
Men er window.location.href ikke JavaScript som sagt?
Avatar billede adam_christensen Nybegynder
29. oktober 2003 - 22:14 #12
Husk at URLDecode-funktionen skal med... ;-)
Avatar billede adam_christensen Nybegynder
29. oktober 2003 - 22:14 #13
window.location.href virker også fra client-side VBScript
Avatar billede themepark Nybegynder
29. oktober 2003 - 22:16 #14
Hmmm...jeg forstår intet...jeg har også fundet ud af at document.write virker i VBScript, men er de to ting da ikke JavaScript eller hvilket sprog er de?
Avatar billede adam_christensen Nybegynder
29. oktober 2003 - 22:35 #15
document er betegnelsen for HTML-dokumentet i IE's objekt-model (og Mozilla, Opera m.fl.). Hvorvidt du bruger javascript eller VBScript til at 'kalde' dette objekt's metoder er for så vidt ligegyldigt.

Write er en alm. VB-metode (fx Response.Write), så det forklarer hvorfor document.Write virker i client-side VBScript.
Avatar billede themepark Nybegynder
29. oktober 2003 - 22:37 #16
Ville document.writeln så også virke under VBScript?
Avatar billede adam_christensen Nybegynder
29. oktober 2003 - 22:43 #17
Umiddelbart ville jeg svare nej, men en lille test viser at det faktisk virker. Måske IE også tillader javascript-metoder selvom LANGUAGE er sat til VBScript. Beats me...
Avatar billede themepark Nybegynder
29. oktober 2003 - 22:45 #18
Hmmm...okay...well...jeg kigger lige på det hele :) Men er der andre måder, hvorpå man kan få den mappe, som ens HTML fil ligger i? Det gode ved WScript.Path er jo, at den kun returnerer mappen, og det er den jeg skal bruge...ikke filnavnet, ikke file:/// så hvis du kender en anden metode, ville det være rart :)
Avatar billede themepark Nybegynder
29. oktober 2003 - 22:46 #19
Men du siger, at jeg ikke har adgang til WScript objektet...men det forklarer vel ikke hvorfor den stopper ved linjen Set FilSystem=CreateObject("Scripting.FileSystemObject")?
Avatar billede medions Nybegynder
30. oktober 2003 - 08:21 #20
storbytossen> Du kan abruge document.write , ikke document.writeln!

//>Rune
Avatar billede adam_christensen Nybegynder
30. oktober 2003 - 09:19 #21
medions> Jeg har prøvet med både write og writeln, og de virker faktisk begge - selvom language i script-blokken er sat til VBScript. Lidt underligt...
Avatar billede adam_christensen Nybegynder
30. oktober 2003 - 09:25 #22
storbytossen> Jeg postede jo en løsning til dig tidligere, godt nok fordelt over to svar/kommentarer. Her får du en samlet HTML-fil - se om du ikke kan bruge det til noget:

<HTML>
<HEAD>
<TITLE>Billede Viser ver. 1.0</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="VBScript">
Function URLDecode(ByVal What)
'URL decode Function
'2001 Antonin Foller, PSTRUH Software, http://www.pstruh.cz
  Dim Pos, pPos

  'replace + To Space
  What = Replace(What, "+", " ")

  on error resume Next
  Dim Stream: Set Stream = CreateObject("ADODB.Stream")
  If err = 0 Then 'URLDecode using ADODB.Stream, If possible
    on error goto 0
    Stream.Type = 2 'String
    Stream.Open

    'replace all %XX To character
    Pos = InStr(1, What, "%")
    pPos = 1
    Do While Pos > 0
      Stream.WriteText Mid(What, pPos, Pos - pPos) + _
        Chr(CLng("&H" & Mid(What, Pos + 1, 2)))
      pPos = Pos + 3
      Pos = InStr(pPos, What, "%")
    Loop
    Stream.WriteText Mid(What, pPos)

    'Read the text stream
    Stream.Position = 0
    URLDecode = Stream.ReadText

    'Free resources
    Stream.Close
  Else 'URL decode using string concentation
    on error goto 0
    'UfUf, this is a little slow method.
    'Do Not use it For data length over 100k
    Pos = InStr(1, What, "%")
    Do While Pos>0
      What = Left(What, Pos-1) + _
        Chr(Clng("&H" & Mid(What, Pos+1, 2))) + _
        Mid(What, Pos+3)
      Pos = InStr(Pos+1, What, "%")
    Loop
    URLDecode = What
  End If
End Function


Dim FilSystem, Mappe, Fil
Set FilSystem=CreateObject("Scripting.FileSystemObject")

sPath = URLDecode(window.location.href)
sPath = Left(sPath, InStrRev(sPath, "/")-1)
If LCase(Left(sPath, 8)) = "file:///" Then
  sPath = Right(sPath, Len(sPath)-8)
End If

MsgBox "HTML-filen ligger i: '" & sPath & "'" & vbCRLF & vbCRLF & "Tryk OK for at vise filerne i mappen..."

Set Mappe=FilSystem.GetFolder(sPath)
Set filer = Mappe.Files
For Each file in filer
  sMsg = sMsg & file.Name & "<br>"
Next

document.Write(sMsg)
</SCRIPT>
</BODY>
</HTML>
Avatar billede adam_christensen Nybegynder
30. oktober 2003 - 09:30 #23
Hov, der mangler lige lidt oprydning mv. ;-)

Dim FilSystem, Mappe, filer, file, sMsg, sPath

og efter document.Write(sMsg):

Set FilSystem = Nothing
Set Mappe = Nothing
Set filer = Nothing
Avatar billede themepark Nybegynder
31. oktober 2003 - 02:29 #24
adam_christensen ja, det er jeg ganske godt klar over, men jeg vil stadig gerne vide om der er en anden måde a la WScript.Path. Dit eksempel fungerer sikkert fint nok, men der er en masse kode, jeg skal sætte mig ind i så, og hvis der i forvejen findes en anden metode der føler med VBScript, så vil jeg jo hellere bruge den :)

Og er der så nogle, der vil forklare mig, hvorfor det hele stopper ved

Set FilSystem=CreateObject("Scripting.FileSystemObject")

? Nok er det et Script objekt, men da vel ikke et WScript objekt?
Avatar billede adam_christensen Nybegynder
31. oktober 2003 - 09:59 #25
storbytossen> Fair nok. Det er ikke muligt at oprette et WScript-objekt fra et HTML client-side script, og derfor er det heller ikke muligt at få adgang til dets metoder (fx WScript.Path - som i øvrigt giver dig stien til wscript.exe og ikke til selve scriptet).

Mht. til hvilken linie fejlen opstår, er det altid til at stole på det linienummer som browseren påstår at fejlen findes i. I dette tilfælde er fejlen i linien: MsgBox(WScript.Path), idet WScript er et ukendt objekt. Prøv at fjern/udkommenter alle linier med WScript i og se om ikke siden loader uden fejl...
Avatar billede themepark Nybegynder
01. november 2003 - 09:48 #26
adam_christensen, faktisk er WScript ikke problemet...som skrevet stoppes det hele ved FileSystemObject linjen...det er jeg nået frem til ved at teste mig frem...og jeg har slet ikke WScript med længere i den test :)
Avatar billede adam_christensen Nybegynder
01. november 2003 - 10:03 #27
Det lyder mærkeligt. Hvis du laver en <script>-blok med kun en linie:

Set FilSysmtem = CreateObject("Scripting.FileSystemObject")

får du så også fejl? Hvis ja, hvilken?
Avatar billede adam_christensen Nybegynder
01. november 2003 - 10:05 #28
Har du i øvrigt prøvet at copy/paste den kode jeg postede d. 30/10 kl. 9:25 ind i et nyt HTML-dokument og se hvad der sker?
Avatar billede thesurfer Nybegynder
18. december 2003 - 04:29 #29
Dette spørgsmål mangler input.
Det kan f.eks. være at spørgeren mangler at acceptere/afvise svar/komme med feedback, eller af en svarer mangler at lægge et svar/komme med feedback.
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