Top-Themen

Aktuelle Themen (A bis Z)

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, 1419 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 ..
Ähnliche Inhalte
Batch & Shell
Batch Schleife als FOR-SCHLEIFE
gelöst Frage von mp2711Batch & Shell2 Kommentare

Mit den FOR-Schleifen habe ich mich leider bislang zu selten auseinander gesetzt, aber da ich sonst gerade nicht weiter ...

Batch & Shell
FOR Schleife mit LOOP und nachfolgender FOR Schleife
gelöst Frage von miczarBatch & Shell6 Kommentare

Hallo zusammen, ich habe ein Problem mit einem Batchfile. Situation: im Netzwerk ist kein WINS mehr vorhanden und so ...

Batch & Shell
FOR Schleife läuft nicht
gelöst Frage von sugramBatch & Shell4 Kommentare

Hallo Ich glaube ich sehe den Wald vor lauter Bäumen nicht. Aber ich bekomme die FOR Schleife nicht zum ...

Batch & Shell
For Schleife kaputt?
gelöst Frage von Peter32Batch & Shell5 Kommentare

Hallo, ich finde den Fehler nicht irgendwie bekomme ich ständig denselben Inhalt in "Name.txt" und kann dann nicht weiterarbeiten ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 19 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 23 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 5 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware10 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Windows 10
Probleme mit Dateien, deren Pfad + Dateiname länger als 256 Zeichen sind
Frage von FalaffelWindows 109 Kommentare

Guten Tag, unter Windows 10 scheint es immer noch das Problem zu geben, dass der Pfad + Dateiname einer ...