Versteckte Dateien mit kill über Makro löschen

Moderator: ModerationP

Re: Versteckte Dateien mit kill über Makro löschen

Beitragvon jhs1 » 11. Jul 2018, 06:35

Und noch eine Ergänzung: Der Code wurde getestet mit einer eigens angelegten verschachtelten Ordnerstruktur, deren jeder Ordner und Unterordner schreibgeschützte, versteckte und "normale" Dateien (in denen nur das Archivattribut gesetzt war) enthielt. Ergebnis, wie erwartet - nach dem Programmlauf waren die schreibgeschützten und versteckten Dateien gelöscht und der Rest noch vorhanden. Wenn es bei dir nicht klappt, muss es irgend ein Implementierungsfehler sein. Ist die Variable Ordstore beim Aufruf mit dem gewünschten Zielordner belegt?
jhs1
 

Re: Versteckte Dateien mit kill über Makro löschen

Beitragvon mahowe » 11. Jul 2018, 10:36

Hallo Jürgen,

habe den Ordstore jetzt in Klammern gesetzt.
Code: Alles auswählen
DateienLoeschen (Ordstore)

Der beim Aufruf meines Schleifen-Makros aufgetretene Fehler "Argumenttyp byRef unverträglich" habe ich dann mit dem Eintrag "Dim Ordstore as String" weggebracht.

Das Schleifen-Makro läuft mit dem Code "Call DateienLoeschen (OrdStore)" über alle 150 Zeilen (Ordner) komplett durch. Es wird aber nichts gelöscht.

Im Einzelschritt ist sichtbar, dass von der obersten Zeile in die unterste (End if) gesprungen wird
Code: Alles auswählen
 If objFso.FolderExists(strPath) Then
    ReDim strFolders(0)
    strFolders(0) = strPath
    Set objFolder = objFso.GetFolder(strPath)
    GetSubfolders objFolder ' Unterordner in Array einlesen
    For i = 0 To UBound(strFolders)
      Set objFolder = objFso.GetFolder(strFolders(i))
      For Each objFile In objFolder.Files
        If objFile.Attributes And 3 Then
          objFile.Attributes = objFile.Attributes And Not (3)
          objFile.Delete
        End If
      Next objFile
    Next i
  End If


In strPath steht bei Mausover strPath="" (siehe Screenshot) nichts drin.
Irgendwie muss ja die Variable "Ordstore" zu "strPath" kommen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
mahowe
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 131
Registriert: 23. Jan 2018, 20:54

Re: Versteckte Dateien mit kill über Makro löschen

Beitragvon jhs » 11. Jul 2018, 11:31

Hallo,

wenn strPath leer ist, dann war es offensichtlich Ordstore beim Aufruf der Sub auch. In dem Zusammenhang noch mal zum Thema Klammern oder nicht: Wenn eine Prozedur mit Call aufgerufen wird, muss die Argumentliste geklammert werden, anderenfalls nicht.

Code: Alles auswählen
' entweder:
Call DateienLoeschen(Ordstore)
' oder:
DateienLoeschen Ordstore


Überprüfe mal den Inhalt von Ordstore vor dem Call:

Code: Alles auswählen
MsgBox Ordstore
Call DateienLoeschen(Ordstore)


Zur Ergänzung noch der Hinweis, dass ich die korrekte Funktion vor dem Posten an einer eigens eingerichteten verschachtelten Ordnerstruktur getestet habe. Jeder Ordner bzw. Unterordner enthielt schreibgeschützte, versteckte und "normale" Dateien (nur Archivattribut gesetzt). Im Ergebnis waren wie erwartet die schreibgeschützten und versteckten Dateien gelöscht und der Rest noch vorhanden. Deshalb kann es eigentlich nur ein Flüchtigkeitsfehler bei der Implementierung sein...

Gruß
jhs
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 47
Registriert: 25. Mär 2015, 09:11

Re: Versteckte Dateien mit kill über Makro löschen

Beitragvon mahowe » 11. Jul 2018, 22:31

Hallo Jürgen,

der Tipp mit der msgBox und ... ist ja generell Gold wert. Als Hilfsmittel bestens geeignet.
Da der Ordstore in dem Makro nicht beschrieben war, war auch kein Wert drin. Danach ging

Jetzt läuft das Makro schon bis zu
Code: Alles auswählen
ReDim Preserve strFolders(u)

hier sagt VBA "Fehler beim Kompilieren, reDim ungültig "

Im Einzelschritt sehe ich bei
strPath = hier ist der richtige Pfad sichtbar (Ordstore)
Bei strfolders(0) = <Index außerhalb des gültigen Bereiches> zu lesen

Wenns Dir zu viel wird einfach stoppen...

Manfred
mahowe
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 131
Registriert: 23. Jan 2018, 20:54

Re: Versteckte Dateien mit kill über Makro löschen

Beitragvon jhs1 » 12. Jul 2018, 07:07

Hallo Manfred,

ich kann keinen Grund für ein ungültiges ReDim erkennen. Habe den Code in der Form, wie du ihn weiter oben gepostet hast, eben noch einmal getestet, und er läuft ohne Fehler durch und tut seinen Job wie erwartet. Ich habe zwar Excel 2010, aber das sollte in diesem Zusammenhang keinen Unterschied machen. Hattest du mal den Hinweis mit Option Explicit umgesetzt, um evtl. Tippfehler auszuschließen?

Gruß Jürgen
jhs1
 

Re: Versteckte Dateien mit kill über Makro löschen

Beitragvon snb » 12. Jul 2018, 08:22

Alle Unterordner in G:\OF\:

Code: Alles auswählen
Private Declare Function OemToCharA Lib "user32.dll" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
       
Public Function F_ASC_ANS(ByVal Text As String) As String
  OemToCharA Text, Text
  F_ASC_ANS = Text
End Function

Sub M_snb()
   sn= split(F_Asc_ANS(CreateObject("wscript.shell").exec("cmd /c dir G:\OF\* /s/ad/b").stdout.readall),vbcrlf)

   for each it in sn
     Msgbox it
  next
End Sub
Zuletzt geändert von snb am 12. Jul 2018, 13:52, insgesamt 2-mal geändert.
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6127
Registriert: 25. Sep 2014, 16:37

Re: Versteckte Dateien mit kill über Makro löschen

Beitragvon jhs1 » 12. Jul 2018, 11:25

@snb: Ist natürlich prinzipiell eine Möglichkeit zum Einlesen der Ordnerstruktur, stellt aber wahrscheinlich den Threadstarter auch vor neue Probleme (Integration seiner Pfadvariablen in die Befehlszeile, Leerzeichen und Umlaute im Pfad).

Es gibt ja einen funktionierenden Code, nur leider noch nicht bei ihm. Sein Problem bei ReDim kann auch nur an einer Kleinigkeit liegen und sollte lösbar sein.

Gruß Jürgen
jhs1
 

Re: Versteckte Dateien mit kill über Makro löschen

Beitragvon snb » 12. Jul 2018, 13:54

Auch wieder erledigt: viewtopic.php?f=166&t=771419&p=3153084#p3153084

Nicht nur für TS, doch für alle 'Mitleser'
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6127
Registriert: 25. Sep 2014, 16:37

Re: Versteckte Dateien mit kill über Makro löschen

Beitragvon mahowe » 13. Jul 2018, 21:51

Danke für die Unterstützung Gentlemans!


Es ist so wie Jürgen sagt. Mit dem SNB - Makro bin ich erst recht überfordert.


Ich denke, bei mir liegt es daran, dass ich nicht genau weiß wo ich (welches Modul) etwas genau reinschreiben muss.
Sonst kämen nach dem vorgeschlagenen Eintrag das "Option Explicit" oberhalb des Makro nicht auch noch die Fehlermeldung dass nach einem End SUB nichts mehr an Text etc. kommen darf.
Falls also der Mut/Muse besteht doch noch mal draufzuschauen. Hier die beiden Makros..

Code: Alles auswählen
Option Explicit

Dim objFso As Object, strFolders() As String

Public Sub DateienLoeschen(strPath As String)
 
 
  Dim objFolder As Object, objFile As Object, i As Long
  Set objFso = CreateObject("Scripting.FileSystemObject")
  If objFso.FolderExists(strPath) Then
    ReDim strFolders(0)
    strFolders(0) = strPath
    Set objFolder = objFso.getfolder(strPath)
    GetSubfolders objFolder ' Unterordner in Array einlesen
    For i = 0 To UBound(strFolders)
      Set objFolder = objFso.getfolder(strFolders(i))
      For Each objFile In objFolder.Files
        If objFile.Attributes And 3 Then
          objFile.Attributes = objFile.Attributes And Not (3)
          objFile.Delete
        End If
      Next objFile
    Next i
  End If
  Set objFso = Nothing
  Set objFolder = Nothing
End Sub

Option Explicit


Private Sub GetSubfolders(ByVal objFolder As Object)
  Dim u As Long, objSubfolder As Object
  For Each objSubfolder In objFolder.subfolders
    u = UBound(strFolders) + 1
    ReDim Preserve strFolders(u)
    strFolders(u) = objSubfolder.Path
    GetSubfolders objSubfolder
  Next objSubfolder
End Sub




Schönen Abend aus einer frustrierten Ecke Frankens
Und nochmals "Vergellsgott" für die intensive Unterstützung.


Manfred
mahowe
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 131
Registriert: 23. Jan 2018, 20:54

Re: Versteckte Dateien mit kill über Makro löschen

Beitragvon jhs1 » 14. Jul 2018, 05:31

Guten Morgen Manfred,

beim ersten Drüberschauen ist mir nur aufgefallen, dass Option Explicit nur einmal (als erste Zeile) in einem Modul stehen darf, also das zweite bitte löschen.

Gruß Jürgen
jhs1
 

Re: Versteckte Dateien mit kill über Makro löschen

Beitragvon jhs1 » 14. Jul 2018, 07:02

So, ich habe deinen geposteten Code jetzt noch mal mit Copy/Paste bei mir eingefügt und ohne Probleme getestet. Voraussetzung ist natürlich, dass beim Aufruf deine Variable Ordstore den richtigen Pfad enthält, aber das hattest du ja überprüft. Ich kann mir nur noch vorstellen, dass dein Office 365 sich irgendwo anders verhält oder deine Systemadministration die gewünschte Funktion verhindert.

Gruß Jürgen
jhs1
 

Re: Versteckte Dateien mit kill über Makro löschen

Beitragvon mahowe » 15. Jul 2018, 15:12

Hallo Jürgen,

ein letztes Aufbäumen, nachdem ich soviel Rückschläge zu meinen Versuchen hatte.
Ich habe eine Test-Excel-Datei (DateiMakroVerstLoe) einschl. einiger Testordner u.Unterordner mit "versteckten Dateien" gezippt und beigelegt.

Sollte dein Frustrationstolerenz-Grenze noch nicht erreicht sin, kann du es ja mal diese Funktion bei dir testen. To Do
1. Entpacken der beiliegenden ZIP-Datei (Unterordner sind mit Dateien dabei)
2. Öffnen der DateiMakroVerstLoe.xlsm - Datei
3. Im WS "Berechnung" den roten Löschen - Button betätigen und die Fehlermeldung abwarten.

Sonst fällt mir nach der erfolglosen Zeitinvestition nichts mehr ein.


Gruß

Manfred
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
mahowe
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 131
Registriert: 23. Jan 2018, 20:54

Re: Versteckte Dateien mit kill über Makro löschen

Beitragvon Storax » 15. Jul 2018, 17:04

Wenn ich das richtig verstanden habe, willst Du ab einem gewissen Startverzeichnis alle "hidden Files" im Verzeichnis und den darunter liegenden Verzeichnissen löschen.
Das würde ich so machen

Code: Alles auswählen
Sub DelFiles()

Const startDir = "d:\dein\startDir\"
   
    Dim colFolder As New Collection
    Dim fso As New Scripting.FileSystemObject
    Dim startFolder As Scripting.Folder
    Set startFolder = fso.GetFolder(startDir)
   
    folderCol colFolder, startFolder
   
    Dim v As Variant
    delHiddenFiles startDir
    For Each v In colFolder
         delHiddenFiles v
    Next
   
End Sub
Und das sind die dazu gehörigen Subs
Code: Alles auswählen
Function delHiddenFiles(ByVal fullPath As String)

Dim fso As Scripting.FileSystemObject
Dim fsoFolder As Scripting.Folder
Dim fsoFile As Scripting.File

    Set fso = New Scripting.FileSystemObject
    If fso.FolderExists(fullPath) Then
        Set fsoFolder = fso.GetFolder(fullPath)
        For Each fsoFile In fsoFolder.Files
            If fsoFile.Attributes And Hidden Then
                fsoFile.Delete
            End If
        Next
    End If

End Function

Sub folderCol(ByRef colFolder As Collection, ByVal fsoFolder As Scripting.Folder)

Dim fso As Scripting.FileSystemObject
Dim fsoSubfolder As Scripting.Folder
   
    Set fso = New Scripting.FileSystemObject
    For Each fsoSubfolder In fsoFolder.SubFolders
        colFolder.Add fsoSubfolder.ParentFolder & "\" & fsoSubfolder.Name
        folderCol colFolder, fsoSubfolder
    Next
   
End Sub
Often the original poster is rather clueless, helping them on the question is only spoon feeding them,
and there is little to no chance the question will help anyone in the future.
Press any key to continue - or any other key to abort.
Benutzeravatar
Storax
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2867
Registriert: 22. Okt 2013, 18:18

Re: Versteckte Dateien mit kill über Makro löschen

Beitragvon Storax » 15. Jul 2018, 17:29

snb hat geschrieben:Auch wieder erledigt: http://www.office-loesung.de/p/viewtopi ... 4#p3153084

Nicht nur für TS, doch für alle 'Mitleser'

Ich lese auch mit :mrgreen:
Code: Alles auswählen
Sub M_snb()
Dim sn As Variant
Dim it As Variant

Const startMask = "D:\Dein\StartDir\*"
   
    sn = Split(F_ASC_ANS(CreateObject("wscript.shell").exec("cmd /c dir """ & startMask & """ /s/ad/b").StdOut.ReadAll), vbCrLf)
    For Each it In sn
        Debug.Print it
    Next
End Sub
Often the original poster is rather clueless, helping them on the question is only spoon feeding them,
and there is little to no chance the question will help anyone in the future.
Press any key to continue - or any other key to abort.
Benutzeravatar
Storax
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2867
Registriert: 22. Okt 2013, 18:18

Re: Versteckte Dateien mit kill über Makro löschen

Beitragvon knobbi38 » 15. Jul 2018, 18:30

Hallo,

ich habe mal versucht, den Code von Storax ein bißchen einfacher zu strukturieren, ohne Collection und nur eine Instanzen auf das Scripting.FileSystemObject:
Code: Alles auswählen
Public Function DeleteFiles(ByVal StartPath As String) As Variant

  Dim objFSO As Object
 
  On Error GoTo Err_Handler
  DeleteFiles = True
 
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  DeleteFilesProc objFSO.GetFolder(StartPath)

Err_Handler:
  If Err.Number <> 0 Then
    DeleteFiles = CVErr(Err.Number)
  End If
 
  Set objFSO = Nothing
  On Error GoTo 0
End Function

Private Sub DeleteFilesProc(ByRef Folder As Object)
    Const F_ATTR_HIDDEN As Long = 2
   
    Dim objSubFld As Object
    Dim objFile As Object
   
    For Each objSubFld In Folder.SubFolders
        DeleteFilesProc objSubFld
    Next
   
    For Each objFile In Folder.Files       
        ' -> check for hidden file
        If (objFile.Attributes And F_ATTR_HIDDEN) = F_ATTR_HIDDEN Then
          objFile.Delete
        End If
    Next
End Sub

Läßt sich so vielleicht auch einfacher erweitern.
Siehe auch http://www.cpearson.com/excel/recursionandfso.htm

Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 406
Registriert: 02. Jul 2015, 14:23

VorherigeNächste

Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: Black-Mage, Frogger1986, snb und 17 Gäste