Avatar billede lasseq Nybegynder
17. november 2002 - 15:33 Der er 2 kommentarer og
1 løsning

Problem med løkke - at lave noget rekursivt?!

Hej!
Jeg er ved at lave et lille VBS-script, der gør, at når jeg klikker på det, encoder scriptet alle ASP filer i den angivne mappe og dens undermapper. Problemet er bare, at jeg ikke er særlig god til det! Jeg vedlægger koden, så kan nogen måske hjælpe mig. Jeg benytter mig af Microsofts Windows Encoder (screnc.exe), og indtil videre virker scriptet - bortset fra at den kun encoder i den mappe den står i, og ikke i dens subfolders.

P.s. vær rar ikke at fortælle mig, at windows encoder ikke krypterer og alt det der.

Encode.vbs
--------------------------------------------------------
'Test-script - Møldrup Webdesign - www.mdw.dk

test = "This script will encode all *.asp files in the same directory as"
test = test & "itself and create a Decoded folder. If the script fails be"
test = test & "sure you have scrdec.exe in the same directory."
WScript.echo test

Set fs = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set folder1 = fs.GetFolder(left( WScript.ScriptFullName ,inStrRev( WScript.ScriptFullName,"\")))
if not fs.folderexists(left( WScript.ScriptFullName ,inStrRev( WScript.ScriptFullName,"\"))&"Encoded") then
set folder2 = fs.createfolder("Encoded")
end if

For each FileName in folder1.files
if inStr(ucase(FileName.name),".ASP" ) then
intReturn = WshShell.Run("cmd /c screnc " & FileName.name & " Encoded\" & FileName.name, 7, FALSE)
end if
next
--------------------------------------------------------
Avatar billede knico Nybegynder
19. november 2002 - 23:11 #1
Nedenstående fungerer her hos mig. Første sub gør det der skal gøres med filerne og anden sub gennemgår hver eneste subfolder og kalder første sub for at manipulere filerne i denne:

Sub tjek_fil(strPath)
Dim fso, myfold, fil, thisFile, txtStream, txt

    Set fso = CreateObject("scripting.filesystemobject")
    Set myfold = fso.getfolder(strPath)
    For each fil in myFold.Files
        '*** Gør det du skal gøre med filerne
    Next
    Set fso=nothing
    Set myfold=nothing
    Set thisfile=nothing
    tjek_fold strpath
End Sub

'Tjekker subfolders
Sub tjek_fold(strFold)
Dim fso, myfold, fold

    Set fso = CreateObject("scripting.filesystemobject")
    Set myfold = fso.getfolder(strFold)
   
    For each fold in myFold.subFolders
        tjek_fil fold
    Next
       
    Set fso=nothing
    Set myfold=nothing

End Sub
Avatar billede knico Nybegynder
30. december 2002 - 23:15 #2
Hmmm...
Avatar billede lasseq Nybegynder
05. januar 2003 - 11:43 #3
Knico -> Tak for dit svar! Det virker upåklageligt! Dog har jeg ved hjælp af en anden udviklet et fuldstændigt script, som jeg vedlægger her.:

encode.vbs
---------------------------------------------------------------
' dette script vil encode alle asp-filer, og kalde sig selv
' så undermapper automatisk medtages (rekursivt kald)
' der promptes for startmappe
' lange filnavne bruges, hvis de IKKE indeholder blanke tegn

' evt parameter hentes
Set argsUnnamed = WScript.Arguments.Unnamed
MitDir = ""
if argsUnnamed.Count > 0 then
MitDir = argsUnnamed.Item(0)
if not right(MitDir,1) = "\" then MitDir=MitDir & "\"
end if
Set WshShell = WScript.CreateObject("WScript.Shell")
Set fs = CreateObject("Scripting.FileSystemObject")
' findes mappen, så encode alle asp-filer, og kopiér alle andre
if fs.folderexists(MitDir) then
' opretter encoded mappetræ inkl evt foregående mapper på samme drev
MitDirEnco = left(MitDir,2) & "\Encoded" & mid(MitDir,3,len(MitDir))
pos = instr(4,MitDirEnco,"\",1)
while pos > 0
if not fs.folderexists(left(MitDirEnco,pos)) then set fs2 = fs.createfolder(left(MitDirEnco,pos))
pos = instr(pos+1,MitDirEnco,"\",1)
wend
Set folder1 = fs.GetFolder(MitDir)
' encoder asp-filer i mitdir, kopiérer alle andre
For each FileName in folder1.files
FraFil = MitDir & FileName.name
TilFil = MitDirEnco & FileName.name
if right(lcase(FraFil),4)=".asp" then
intReturn = WshShell.Run("cmd /c screnc " & FraFil & " " & TilFil, 7, FALSE)
else
intReturn = fs.CopyFile(FraFil, TilFil)
end if
next
' finder mapper i folderen MitDir, og kalder sig selv med mappens fulde sti som parameter
Set SubFolders = folder1.SubFolders
If SubFolders.Count <> 0 Then
for Each SubFolder In SubFolders
if lcase(SubFolder.name) <> "encoded" then
NytDir = SubFolder.Path
if instr(1,NytDir," ",1) then NytDir = SubFolder.ShortPath
intReturn = WshShell.Run("encode.vbs " & NytDir, 7, FALSE)
end if
Next
End If
Set folder1 = nothing
Set SubFolders = nothing
else
' hvis ingen parameter, så promt efter en
if not lcase(MitDir) = "x\" then
NytDir = inputbox("Indtast startmappen eller X for stop: ","Hvor?","")
intReturn = WshShell.Run("encode.vbs " & NytDir, 7, FALSE)
end if
end if
Set WshShell = nothing
Set fs = nothing
-------------------------------------------------------------------
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