Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBS: Erlaubnis verweigert in For-Next-Schleife

Frage Entwicklung Basic

Mitglied: Gurkenhobel

Gurkenhobel (Level 1) - Jetzt verbinden

20.01.2015, aktualisiert 12:41 Uhr, 1346 Aufrufe, 6 Kommentare, 1 Danke

Hallo Gemeinde,
wieder stehe ich vor einem Problemchen.
Als VBS-Neuling habe ich ein vorhandenes Script modifiziert.
Dieses soll alle Unterordner eines genannten (oder des aktuellen) Verzeichnisses durchsuchen und für jeden Unterordner die Anzahl der gefundenen Dateien angeben. Schließlich soll das Ergebnis (einschl. der Gesamtzahl von Dateien) in eine Log-Datei dikumentiert werden. Rekursionstiefe unbegrenzt.

Das von mir modifizierte Script bringt eine Erlaubnisverweigerung in Zeile 18.
Außerdem fehlt die Gesamtzahl der Dateien.
Und ich hätte gerne das Startverzeichnis (hier also 'Digitale Bilder' ) weggelassen;
also z.B. Start im Ordner Reisen
  • Reisen\USA\Colorado wäre falsch --> richtig wäre USA\Colorado
  • Reisen\USA\California\Los Angeles wäre falsch --> stattdessen USA\California\Los Angeles

Über Hilfe würde ich mich sehr freuen

Micha:

01.
Dim goFso, gcsFolder, gcsSubFolder, lcsSubFolder 
02.
Set goFso = CreateObject("Scripting.FileSystemObject") 
03.
set gcsFolder = goFso.GetFolder("i:\Digitale Bilder\Reisen\USA")  
04.
' set gcsFolder = goFso.GetFolder(".") ' aktuelle Ordner 
05.
const strLogFile="log.txt" 
06.
 
07.
Call CountFiles(gcsFolder) 
08.
Set gcsSubFolder = gcsFolder.SubFolders 
09.
Set objFile = goFso.CreateTextFile(strLogFile) 
10.
 
11.
For Each SubFolder In gcsSubFolder 
12.
    Call countFiles(SubFolder) 
13.
next 
14.
 
15.
Sub CountFiles(folder) 
16.
    Dim lcsFolder, lcsSubFolder 
17.
    set lcsFolder = goFso.GetFolder(folder) 
18.
    set objFile = goFso.CreateTextFile(strLogFile) <---  
19.
    objFile.WriteLine ("Ordner: ") & gcsFolder 
20.
    objFile.WriteLine ("¯¯¯¯¯¯¯¯¯¯¯¯¯¯") 
21.
    objFile.WriteLine(Folder & " : " &lcsFolder.files.count) 
22.
    '    WScript.Echo(Folder & " : " &lcsFolder.files.count) 
23.
    set lcsSubFolder = lcsFolder.SubFolders 
24.
        For Each sSubFolder In lcsSubFolder 
25.
            Call CountFiles(sSubFolder) 
26.
        Next 
27.
 
28.
    Set lcsSubFolder = Nothing 
29.
    Set lcsFolder = nothing 
30.
objFile.close 
31.
End Sub 
32.
 
33.
Set gcsSubFolder = nothing 
34.
set gcsFolder = nothing 
35.
Set goFso = nothing  
36.
 
Mitglied: 114757
20.01.2015 um 13:54 Uhr
01.
const strLogFile="log.txt" 
02.
Dim goFso, gcsFolder, subfolder,objFile 
03.
Set goFso = CreateObject("Scripting.FileSystemObject") 
04.
set gcsFolder = goFso.GetFolder("i:\Digitale Bilder\Reisen")  
05.
Set objFile = goFso.CreateTextFile(strLogFile) 
06.
 
07.
For Each subfolder In gcsFolder.SubFolders 
08.
	folderCount = 0 
09.
	strSubFolders = "" 
10.
	CountFiles subfolder 
11.
	objFile.WriteLine "Ordner: " & subfolder.Path 
12.
	objFile.WriteLine "Gesamtanzahl Dateien : " & folderCount 
13.
	objFile.WriteLine strSubFolders 
14.
	objFile.WriteLine "------------------------" 
15.
Next 
16.
objFile.Close 
17.
MsgBox "Feddich" 
18.
set gcsFolder = nothing 
19.
Set goFso = Nothing 
20.
Set objFile = Nothing 
21.
 
22.
Sub CountFiles(folder) 
23.
	On Error Resume Next 
24.
	folderCount = folderCount + folder.files.count 
25.
    strSubFolders = strSubFolders & folder.Path & " : " & folder.files.count & vbNewLine 
26.
    For Each sSubFolder In folder.SubFolders 
27.
        CountFiles sSubFolder 
28.
    Next 
29.
End Sub
Gruß jodel32
Bitte warten ..
Mitglied: Gurkenhobel
20.01.2015 um 15:43 Uhr
Danke Dir,
ja soweit geht das Script schon ganz gut, habe die Zeilen 11 u. 12 auskommentiert.

- es fehlt eben nur noch die Gesamtzahl aller Dateien im angegebenen gcsfolder und darunter
- und der verkürzte Ordner-Link (statt E:\DigiBilder\Reisen\USA\California\Los Angeles --> Reisen\USA\California\Los Angeles wenn man bei DigiBilder das Script 'startet'.)
Bitte warten ..
Mitglied: 114757
LÖSUNG 20.01.2015, aktualisiert 22.01.2015
Zitat von Gurkenhobel:

Danke Dir,
ja soweit geht das Script schon ganz gut, habe die Zeilen 11 u. 12 auskommentiert.
Wieso ?? Darin steht gerade eben die Gesamtanzahl der Dateien des jeweiligen Ordners aus der ersten Ebene inkl. aller Subordner...
- es fehlt eben nur noch die Gesamtzahl aller Dateien im angegebenen gcsfolder und darunter
s.o. Ich gehe davon aus das du den "Reisen-Ordner" angibst und für alle Ordner der ersten Ebene die Gesamtanzahl inkl. deren Unterordner ermittelt wird. Du gibst also an E:\DigiBilder\Reisen
Ansonsten musst du das gewünschte besser Erläutern ....
- und der verkürzte Ordner-Link (statt E:\DigiBilder\Reisen\USA\California\Los Angeles --> Reisen\USA\California\Los
Angeles wenn man bei DigiBilder das Script 'startet'.)
Das lässt sich mit einem einfachen replace zwischen Zeile 10 und 11 machen ....
01.
strSubFolders = Replace(strSubfolders,"E:\DigiBilder\","",1,-1,1)
Bitte warten ..
Mitglied: Gurkenhobel
20.01.2015 um 20:27 Uhr
Ja so siehts aus, aber ich hätte gern die Summe ALLER Dateien ausgehend vom Startordner Digitale Bilder\Reisen,
also in diesem Falle 8+5+16+15+24 also 68
01.
 Start: C:\Digitale Bilder\Reisen 
02.
 
03.
Ordner: C:\Digitale Bilder\Reisen\Faröer 
04.
Gesamtanzahl Dateien : 8 
05.
C:\Digitale Bilder\Reisen\Faröer : 8 
06.
 
07.
------------------------ 
08.
Ordner: C:\Digitale Bilder\Reisen\Island 
09.
Gesamtanzahl Dateien : 5 
10.
C:\Digitale Bilder\Reisen\Island : 5 
11.
 
12.
------------------------ 
13.
Ordner: C:\Digitale Bilder\Reisen\Kanada 
14.
Gesamtanzahl Dateien : 16 
15.
C:\Digitale Bilder\Reisen\Kanada : 0 
16.
C:\Digitale Bilder\Reisen\Kanada\Alberta : 3 
17.
C:\Digitale Bilder\Reisen\Kanada\Saskatchewan : 13 
18.
 
19.
------------------------ 
20.
Ordner: C:\Digitale Bilder\Reisen\Malta 
21.
Gesamtanzahl Dateien : 16 
22.
C:\Digitale Bilder\Reisen\Malta : 15 
23.
 
24.
------------------------ 
25.
Ordner: C:\Digitale Bilder\Reisen\USA 
26.
Gesamtanzahl Dateien : 24 
27.
C:\Digitale Bilder\Reisen\USA : 0 
28.
C:\Digitale Bilder\Reisen\USA\California : 0 
29.
C:\Digitale Bilder\Reisen\USA\California\Los Angeles : 3 
30.
C:\Digitale Bilder\Reisen\USA\California\National Parks : 5 
31.
C:\Digitale Bilder\Reisen\USA\California\San Francisco : 6 
32.
C:\Digitale Bilder\Reisen\USA\Colorado : 5 
33.
C:\Digitale Bilder\Reisen\USA\Nebraska : 2 
34.
C:\Digitale Bilder\Reisen\USA\Wyoming : 3
Melde mich morgen wieder - muss auf Arbeit...
Schön' abend noch, M.
Bitte warten ..
Mitglied: 114757
21.01.2015, aktualisiert um 09:13 Uhr
Das ist doch Kinderkacke, einfach in der ersten Schleife eine weitere Variable für den Total-Zähler hernehmen die die Variable folderCount bei jedem Durchlauf hinzuaddiert, und dann nach der Schleife in die Datei schreibt. Feddich ...
Bitte warten ..
Mitglied: Gurkenhobel
21.01.2015 um 19:42 Uhr
Hi,
die Gindergacke wurde ein gedämpft und nach Experimentieren habe ich nun folgendes Endscript, das mir unabhängig vom Startordner die Unterordner im gewünschten Layout zeigt.
01.
strLogFile=date & "_log.txt" 
02.
Dim goFso, gcsFolder, subfolder,objFile 
03.
Set goFso = CreateObject("Scripting.FileSystemObject") 
04.
' set gcsFolder = goFso.GetFolder("C:\Digitale Bilder\Reisen\") 
05.
Startordner=InputBox("Geben Sie den Pfad ein ! ") 
06.
set gcsFolder = goFso.GetFolder(Startordner)  
07.
Set objFile = goFso.CreateTextFile(strLogFile) 
08.
objFile.WriteLine("Start: ") & gcsFolder & vbNewLine 
09.
 Zaehler = 0 
10.
 
11.
For Each subfolder In gcsFolder.SubFolders 
12.
	folderCount = 0 
13.
      
14.
	strSubFolders = "" 
15.
	CountFiles subfolder 
16.
      '    strSubFolders = Replace(strSubfolders,"C:\Digitale Bilder\Reisen"," ",1,-1,1) ' Originalvorschlag 
17.
          strSubFolders1 = Replace(strSubfolders,gcsFolder," ",1,-1,1) ' entfernt Startordner 
18.
      '    strSubFolders2 = Replace(strSubfolders1,"\","",1,1,1) 'entfernt führenden Backslash 
19.
 
20.
	objFile.WriteLine "Ordner: " & subfolder.Path 
21.
	objFile.WriteLine " Gesamtanzahl Dateien : " & folderCount 
22.
	objFile.WriteLine strSubFolders1 
23.
	objFile.WriteLine "------------------------" 
24.
Zaehler = Zaehler + foldercount 
25.
Next 
26.
objFile.WriteLine "Insgesamt " & Zaehler & " Dateien im Ordner """ & Startordner & """ und darunter." 
27.
strSubFolders = Replace(strSubfolders,"\"," ",1,1,1) 'entfernt führende Backslash  
28.
objFile.Close 
29.
MsgBox "Feddich " & Zaehler & " Dateien gezählt" 
30.
set gcsFolder = nothing 
31.
Set goFso = Nothing 
32.
Set objFile = Nothing 
33.
 
34.
Sub CountFiles(folder) 
35.
	On Error Resume Next 
36.
  Pfad=folder.path  
37.
  folderCount = folderCount + folder.files.count 
38.
 
39.
  If Instr(2,Pfad,":\",1) then 
40.
   Pfad = " " & Right(Pfad,Len(Pfad)-Len(gcsFolder)-1) ' entfernt den Pfad des Startordners 
41.
  else 
42.
  end if 
43.
 
44.
   strSubFolders = strSubFolders & Pfad & " : " & folder.files.count & vbNewLine 
45.
   For Each sSubFolder In folder.SubFolders 
46.
    CountFiles sSubFolder 
47.
   Next 
48.
End Sub
Siehst Du da etwaige Verbesserungen ?
Danke, schönen Abend noch und Tschüs, M.
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Seltsames Verhalten bei Errorlevel abfrage in FOR DO Schleife (1)

Frage von Kalma73 zum Thema Batch & Shell ...

Batch & Shell
gelöst CMD: icacls in for-Schleife (2)

Frage von Lowrider614 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Problem bei einer For Schleife (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Batch & Shell
gelöst For Schleife kaputt? (5)

Frage von Peter32 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...