Leere Ordner, die ein bestimmtes Wort NICHT beinhalten, verschieben bzw. löschen
hallo,
ich stehe vor einem problem, für das ich selbst keine lösung finden kann. ich hab eine größere Menge von Ordnern, in denen sich dateien und auch immer eine prüfsummendatei befinden, über einen server auf eine andere platte verschoben. der server hat dabei per script die prüfsummen verglichen und nur diejenigen dateien durchgelassen, die den check bestanden haben. wenn ein ordnerinhalt den test nicht bestand, wurde der ordner jedoch auf der neuen platte erstellt und ist nun entweder leer oder beinhaltet dateien, die nicht in der prüfsumme enthalten sind. vollständige ordner wurden auf der zielplatte mit einem zusätzlichen "header"-ordner versehen, der im namen zusätzlich das wort "complete" beinhaltet.
ich suche jetzt nach einer möglichkeit, über der zielplatte mit einem script zu iterieren und alle ordner, die leer sind und nicht das wort "complete" oder "incomplete" beinhalten, in einen sammelordner zu verschieben, um das löschen manuell vorzunehmen und so nochmal eine letzte sicherheitsschranke gegen versehentliches löschen falscher ordner einzubauen.
ich suche nun schon tagelang nach einem guten tut für ein batch-script oder vbs. aber ich komme nicht voran, weil ich bislang programmiertechnisch nur über dateien iteriert habe und die syntax der batch scripte nicht so wirklich verstehe. zwar gibt es den befehl if exist und die option des stringvergleiches, aber irgendwie krieg ich das nicht so zusammengebaut, dass die ordnernamen darauf geprüft werden, ob sie diese begriffe nicht enthalten.
hat vielleicht jemand eine idee, wie man da rangehen könnte oder gar schonmal sowas geschrieben?
ich wäre wirklich super dankbar für hilfe.
mfg
clubnite
ich stehe vor einem problem, für das ich selbst keine lösung finden kann. ich hab eine größere Menge von Ordnern, in denen sich dateien und auch immer eine prüfsummendatei befinden, über einen server auf eine andere platte verschoben. der server hat dabei per script die prüfsummen verglichen und nur diejenigen dateien durchgelassen, die den check bestanden haben. wenn ein ordnerinhalt den test nicht bestand, wurde der ordner jedoch auf der neuen platte erstellt und ist nun entweder leer oder beinhaltet dateien, die nicht in der prüfsumme enthalten sind. vollständige ordner wurden auf der zielplatte mit einem zusätzlichen "header"-ordner versehen, der im namen zusätzlich das wort "complete" beinhaltet.
ich suche jetzt nach einer möglichkeit, über der zielplatte mit einem script zu iterieren und alle ordner, die leer sind und nicht das wort "complete" oder "incomplete" beinhalten, in einen sammelordner zu verschieben, um das löschen manuell vorzunehmen und so nochmal eine letzte sicherheitsschranke gegen versehentliches löschen falscher ordner einzubauen.
ich suche nun schon tagelang nach einem guten tut für ein batch-script oder vbs. aber ich komme nicht voran, weil ich bislang programmiertechnisch nur über dateien iteriert habe und die syntax der batch scripte nicht so wirklich verstehe. zwar gibt es den befehl if exist und die option des stringvergleiches, aber irgendwie krieg ich das nicht so zusammengebaut, dass die ordnernamen darauf geprüft werden, ob sie diese begriffe nicht enthalten.
hat vielleicht jemand eine idee, wie man da rangehen könnte oder gar schonmal sowas geschrieben?
ich wäre wirklich super dankbar für hilfe.
mfg
clubnite
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 76735
Url: https://administrator.de/forum/leere-ordner-die-ein-bestimmtes-wort-nicht-beinhalten-verschieben-bzw-loeschen-76735.html
Ausgedruckt am: 26.07.2025 um 08:07 Uhr
17 Kommentare
Neuester Kommentar
Hier ein Entwurf in Batch (nicht getestet und ohne Kosmetik):
Sollte eigentlich laufen. Melde dich auf jeden Fall, egal ob es geklappt hat oder nicht.
Edit:
"<Pfad zu deinem Ordner>" musst du natürlich noch mit dem entsprechenden Pfad ersetzen
@echo off
::Eventuell existierende Logfiles ins Jenseits befördern
if exist %systemroot%\temp\delbatch (
rmdir /s /q %systemroot%\temp\delbatch
)
::Ordner für Logfiles erstellen
mkdir %systemroot%\temp\delbatch
:: Alle Ordner herausfiltern, die das Wort "Complete" nicht enthalten
dir <Pfad zu deinem Ordner> /s /b /a:d | find /v /i "complete" >%systemroot%\temp\delbatch\step1.txt
::Aus dem 2. Logfile alle Ordner herausfiltern, die das Wort "Incomplete" nicht enthalten
dir <Pfad zu deinem Ordner> /s /b /a:d | find /v /i "incomplete" >%systemroot%\temp\delbatch\step2.txt
::Jeden Ordner auf der Liste "step2.txt" löschen
for /f %%a IN (%systemroot%\temp\delbatch\step2.txt) DO rmdir /s /q "%%a"
Sollte eigentlich laufen. Melde dich auf jeden Fall, egal ob es geklappt hat oder nicht.
Edit:
"<Pfad zu deinem Ordner>" musst du natürlich noch mit dem entsprechenden Pfad ersetzen
Hallo Clubnite und willkommen im Forum!
Eine VBS-Variante mit einem kleinen Schönheitsfehler sähe etwa so aus:
Der angesprochene Schönheitsfehler besteht darin, dass das Verschieben des Verzeichnisses durch das Anlegen eines neuen Verzeichnispfades im Zielverzeichnis und anschließendes Löschen des Originalverzeichnisses nur simuliert wird.
Begründung dafür: Einerseits muss (im Gegensatz zu einer Batch-Version) in VBS ohnehin der Pfad schrittweise (Unterverzeichnis für Unterverzeichnis) erstellt werden, andererseits scheint (für mich überraschend) ein Verschieben von Verzeichnissen auf eine andere Partition (zumindest unter XP und WSH 5.6) per VBS nicht möglich.
Gedacht ist das Script für eine Verwendung von der Kommandozeile, zB
damit die jeweils "verschobenen" Verzeichnisse durch die "WScript.Echo"-Zeile vernünftig (im Sinne von "nicht als einzeln wegzuklickende MsgBoxes") ausgegeben werden können. Mit einem zusätzlichen "> Log.txt" lässt sich diese Ausgabe natürlich auch in eine Textdatei umleiten.
Grüße
bastla
Eine VBS-Variante mit einem kleinen Schönheitsfehler sähe etwa so aus:
' MoveEmptyFoldersAccordingToPartOfName.vbs
Const BaseFolder = "D:\Test\" ' immer abschließenden "\" verwenden
Const MoveTo = "E:\Temp" ' nie abschließenden "\" verwenden
Const CheckFor = "complete" ' "incomplete" wird, da "complete" enthaltend, damit auch gefunden
L = Len(BaseFolder)
Set fso = CreateObject("Scripting.FilesystemObject")
If fso.FolderExists(BaseFolder) Then
If Not fso.FolderExists(MoveTo) Then
fso.CreateFolder(MoveTo)
End If
DoFolders fso.GetFolder(BaseFolder)
Else
WScript.Echo "Startordner " & BaseFolder & " nicht gefunden!"
WScript.Quit(1)
End If
WScript.Echo "Fertig."
Sub DoFolders(Folder)
For Each SubFolder In Folder.SubFolders
DoFolders SubFolder
' Auf der untersten Verzeichnisebene beginnen, um auch erst durch
' das Script geleerte Verzeichnisse berücksichtigen zu können
If (SubFolder.SubFolders.Count + SubFolder.Files.Count) = 0 Then
If InStr(LCase(SubFolder.Name), CheckFor) = 0 Then
MoveFolder SubFolder.Path
End If
End If
Next
End Sub
Sub MoveFolder(SourcePath)
RelPath = Mid(SourcePath, L + 1) ' Relativer Pfad unterhalb von "BaseFolder"
Tree = Split(RelPath, "\")
TargetPath = MoveTo
' Verzeichnisstruktur unterhalb von "MoveTo" schrittweise erstellen
For i = 0 To UBound(Tree)
TargetPath = TargetPath & "\" & Tree(i)
If Not fso.FolderExists(TargetPath) Then fso.CreateFolder(TargetPath)
Next
fso.DeleteFolder SourcePath
WScript.Echo SourcePath & ";" & TargetPath
End Sub
Begründung dafür: Einerseits muss (im Gegensatz zu einer Batch-Version) in VBS ohnehin der Pfad schrittweise (Unterverzeichnis für Unterverzeichnis) erstellt werden, andererseits scheint (für mich überraschend) ein Verschieben von Verzeichnissen auf eine andere Partition (zumindest unter XP und WSH 5.6) per VBS nicht möglich.
Gedacht ist das Script für eine Verwendung von der Kommandozeile, zB
cscript //nologo "C:\Scripts\MoveEmptyFoldersAccordingToPartOfName.vbs"
Grüße
bastla
Moin Clubnite,
willkommen im Forum auch von mir.
Dann will ich auch noch eine CMD-Prompt-Variante beisteuern.
Anders als in bastlas Ansatz möchte ich aber auf die Rekursivität (unbekannte/beliebige Anzahl Verzeichnisebenen) verzichten und von einer festgelegten Anzahl Ebenen ausgehen.
Nicht weil es am CMD-Prompt nicht rekursiv ginge, sondern weil es unnötige Komplexität in dieses banale Problem hineinbrächte.
Wenn wir von einer konstanten Anzahl Unterebenen ausgehen (meinetwegen 3, die uns gleich wieder wieder als %a, %b und %c begegnen) dann sollte es wie im folgenden Beispiel gehen.
Gegeben sei folgende Verzeichnis/Dateistruktur (erst alles, dann nur DIRs, dann nur FILEs):
...dann sollten, wenn ich es richtig gelesen habe, die Unterordner "Neuer_Ordner...3" und "Neuer_Ordner...4" als OKAY gelten.
Denn diese enthalten einen Unterordner mit dem Signalwort "complete".
Ordner "..1" und "...2" könnten/müssten verschoben werden.
Hier kann noch differenziert/verfeinert werden: Ordner "..1" enthält eine Datei, Ordner "...2" ist vollkommen leer.
Tasten wir uns ran mit 3 Ebenen (%a %b %c) am CMD-Prompt:
So bekäme ich alle "dritten" Verzeichnisebenen, die KEINEN Subfolder "*complete*" enthalten.
Wenn zusätzlich keine Datei darin sei darf, dann können wir das testen, weil sich beide beim "Dir /s /b" unterschiedlich verhaltnn
[Exkurs]
Wenn wir die untere Ausgabe (Ordner "...1") noch mal durch den Find-Befehl jagen und nach dem Verzeichnisnamen suchen lassen, wird etwas gefunden.
Bei Ordner "..2", der weder Dateien enthält noch Unterordner wird nichts gefunden.
Also ändern wir die rechte Tu-Was-Seite der Zeile auf
Gut, der Rest ist einfach. Der Arbeits-Teil, der bisher aus
...wenn das LEERE Verzeichnis "%b" als Merkposten angelegt werden soll vor dem Löschen
-oder-
...wenn ein halbvolles Verzeichnis verschoben werden soll.
So oder so sollte es mit einem Oneliner vom CMD-Prompt gehen, auch für mehrere Startverzeichnisse:
Grüße
Biber
willkommen im Forum auch von mir.
Dann will ich auch noch eine CMD-Prompt-Variante beisteuern.
Anders als in bastlas Ansatz möchte ich aber auf die Rekursivität (unbekannte/beliebige Anzahl Verzeichnisebenen) verzichten und von einer festgelegten Anzahl Ebenen ausgehen.
Nicht weil es am CMD-Prompt nicht rekursiv ginge, sondern weil es unnötige Komplexität in dieses banale Problem hineinbrächte.
Wenn wir von einer konstanten Anzahl Unterebenen ausgehen (meinetwegen 3, die uns gleich wieder wieder als %a, %b und %c begegnen) dann sollte es wie im folgenden Beispiel gehen.
Gegeben sei folgende Verzeichnis/Dateistruktur (erst alles, dann nur DIRs, dann nur FILEs):
Z:\>
$cmd$dir Beutelsuppe /b /s
Z:\Beutelsuppe\BS 01
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 1
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 2
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 3
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 4
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 1\somewhat.tmp
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 3\this is complete
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 3\this is complete\01.jpg
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 4\this is incomplete
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 4\anyFile.tmp
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 4\this is incomplete\00.sfv
Z:\>
$cmd$dir Beutelsuppe /b /s /a:d
Z:\Beutelsuppe\BS 01
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 1
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 2
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 3
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 4
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 3\this is complete
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 4\this is incomplete
Z:\>
$cmd$dir Beutelsuppe /b /s /a:-d
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 1\somewhat.tmp
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 3\this is complete\01.jpg
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 4\anyFile.tmp
Z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 4\this is incomplete\00.sfv
Denn diese enthalten einen Unterordner mit dem Signalwort "complete".
Ordner "..1" und "...2" könnten/müssten verschoben werden.
Hier kann noch differenziert/verfeinert werden: Ordner "..1" enthält eine Datei, Ordner "...2" ist vollkommen leer.
Tasten wir uns ran mit 3 Ebenen (%a %b %c) am CMD-Prompt:
$cmd$for /d %a in (z:\Beutelsuppe\*) do @for /d %b in ("%a\*") do @for /d %c in ("%b") do @if not exist "%b\*complete*" @echo %c
"z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 1"
"z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 2"
Wenn zusätzlich keine Datei darin sei darf, dann können wir das testen, weil sich beide beim "Dir /s /b" unterschiedlich verhaltnn
[Exkurs]
$cmd$dir "z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 2\" /b /s
$cmd$dir "z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 1\" /b /s
z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 1\somewhat.tmp
Bei Ordner "..2", der weder Dateien enthält noch Unterordner wird nichts gefunden.
Also ändern wir die rechte Tu-Was-Seite der Zeile auf
...$cmd$....@if not exist "%b\*complete*" @dir "%b\*.*" /s/b|find /i "%b">nul || @echo %b
$cmd$for /d %a in (z:\Beutelsuppe\*) do @for /d %b in ("%a\*") do @for /d %c in ("%b") do @if not exist "%b\*complete*" @dir "%b\*.*" /s/b|find /i "%b">nul || @echo %b
z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 2
Gut, der Rest ist einfach. Der Arbeits-Teil, der bisher aus
....@echo %b"
für das gefundene Verzeichnis besteht, kann ersetzt werden durch ein ... ...md "y:\sicherheitskopie\%~pnxb" && rd "%b"
-oder-
..md "y:\sicherheitskopie\%~pnxb" && xcopy /s /e "%b\*.*" "y:\sicherheitskopie\%~pnxb" && rd "%b"
So oder so sollte es mit einem Oneliner vom CMD-Prompt gehen, auch für mehrere Startverzeichnisse:
$cmd$for /d %a in (d:\temp\arm\* z:\Beutelsuppe\*) do @for /d %b in ("%a\*") do @for /d %c in ("%b") do @if not exist "%b\*complete*" @echo %c
"d:\temp\arm\Arm 001\Neuer Ordner_Neuer Ordner 1"
"d:\temp\arm\Arm 001\Neuer Ordner_Neuer Ordner 2"
"z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 1"
"z:\Beutelsuppe\BS 01\Neuer Ordner_Neuer Ordner 2"
Grüße
Biber
Hallo Clubnite!
Kurz zum Thema "Verschieben": Wenn Du nur innerhalb einer Partition verschiebst, sollte die Datenmenge eigentlich nicht relevant sein, da ja nur die Pointer auf die jeweiligen Ordner der obersten Ebene geändert werden müssen.
Soferne ich Dich richtig verstehe, sind mit "I:\-=[ A ]=-\" bis "I:\-=[ Z ]=-\" nur Ordner im Rootverzeichnis zu berücksichtigen, sodass also der jeweilige Ordner als "BaseFolder" im Script gelten kann. Das sähe dann etwa so aus:
Das Script ist in dieser Version noch ungetestet.
Grüße
bastla
Kurz zum Thema "Verschieben": Wenn Du nur innerhalb einer Partition verschiebst, sollte die Datenmenge eigentlich nicht relevant sein, da ja nur die Pointer auf die jeweiligen Ordner der obersten Ebene geändert werden müssen.
Soferne ich Dich richtig verstehe, sind mit "I:\-=[ A ]=-\" bis "I:\-=[ Z ]=-\" nur Ordner im Rootverzeichnis zu berücksichtigen, sodass also der jeweilige Ordner als "BaseFolder" im Script gelten kann. Das sähe dann etwa so aus:
' MoveEmptyFoldersAccordingToPartOfNameExtended.vbs
Const MoveTo = "E:\Temp" ' nie abschließenden "\" verwenden
' Verzeichnisse mit diesen Wörtern (Angabe in Kleinschreibung) im Namen nicht bearbeiten
' "incomplete" wird durch "complete" automatisch berücksichtigt
Exclude = Array("complete", "want")
Set fso = CreateObject("Scripting.FilesystemObject")
If Not fso.FolderExists(MoveTo) Then
fso.CreateFolder(MoveTo)
End If
' Alle Verzeichnisse "I:\-=[ A ]=-\" bis "I:\-=[ Z ]=-\" als "BaseFolder" verwenden
For i = Asc("A") To Asc("Z")
' Name des Verzeichnisses wird hier erstellt
BaseFolder = "I:\-=[" & Chr(i) & "]=-\"
' L = Len(BaseFolder)
L = 3 ' nur "I:\" bei der Ermittlung des relativen Pfades abschneiden,
' da ev mehrere gleichnamige Unterverzeichnisse in den einzelnen
' "I:\-=[ x ]=-\"-Verzeichnissen existieren und es damit zu Kollisionen
' beim "Verschiebe"-Ziel kommen könnte.
If fso.FolderExists(BaseFolder) Then
WScript.Echo "Bearbeite " & BaseFolder
DoFolders fso.GetFolder(BaseFolder)
Else
WScript.Echo "Ordner " & BaseFolder & " nicht gefunden!"
End If
Next
WScript.Echo "Fertig."
Sub DoFolders(Folder)
For Each SubFolder In Folder.SubFolders
DoFolders SubFolder
' Auf der untersten Verzeichnisebene beginnen, um auch erst durch
' das Script geleerte Verzeichnisse berücksichtigen zu können
'Ist Verzeichnis leer?
If (SubFolder.SubFolders.Count + SubFolder.Files.Count) = 0 Then
DoIt = True
' Ist ein vorgegebenes Wort im Verzeichnisnamen enthalten?
For Each Word In Exclude
If InStr(LCase(SubFolder.Name), Word) > 0 Then
DoIt = False
Exit For
End If
Next
End If
If DoIt Then ' Keines der vorgegebenen Wörter im Namen gefunden
MoveFolder SubFolder.Path
End If
Next
End Sub
Sub MoveFolder(SourcePath)
RelPath = Mid(SourcePath, L + 1) ' Relativer Pfad unterhalb von "BaseFolder"
Tree = Split(RelPath, "\")
TargetPath = MoveTo
' Verzeichnisstruktur unterhalb von "MoveTo" schrittweise erstellen
For i = 0 To UBound(Tree)
TargetPath = TargetPath & "\" & Tree(i)
If Not fso.FolderExists(TargetPath) Then fso.CreateFolder(TargetPath)
Next
fso.DeleteFolder SourcePath
WScript.Echo SourcePath & ";" & TargetPath
End Sub
Grüße
bastla
Hallo Clubnite!
bzw
vorgenommen hast, ist dieses Verhalten nicht nachvollziehbar.
Auch, dass die Schleife nicht enden sollte, ist mir auf Basis der von mir geposteten Version, welche ich soeben in dieser Hinsicht kurz getestet habe, nicht erklärlich.
Grüße
bastla
allerdings werden verzeichnisse mit nicht verwendeten sonderzeichen im root gesucht wie z.B. -=[ @ ]=- und -=[ ! ]=- usw.
Soferne Du keine Änderungen an den ZeilenFor i = Asc("A") To Asc("Z")
BaseFolder = "I:\-=[" & Chr(i) & "]=-\"
Auch, dass die Schleife nicht enden sollte, ist mir auf Basis der von mir geposteten Version, welche ich soeben in dieser Hinsicht kurz getestet habe, nicht erklärlich.
Grüße
bastla
Hallo Clubnite!
War mein Fehler, dass ich die Blanks nicht berücksichtigt hatte ...
... und noch mehr, dass ich nicht bedacht hatte, dass Variable in VBS grundsätzlich global verwendet werden.
Ändere daher bitte in den beiden genannten Zeilen die Schleifenvariable "i" auf zB "Letter", also:
Grüße
bastla
[Edit]
Fehlerursache "globale Variablenverwendung" gefunden.
Mein oben angesprochener "Kurztest" hatte sich nur auf die oberste Ordnerebene und deren Namenskonventionen bezogen und kein tatsächliches "Verschieben" beinhaltet - daher war mir nicht aufgefallen, dass im "Sub MoveFolder" die ursprünglich im Hauptprogramm verwendete Schleifenvariable "i" einen neuen Wert erhält.
[/Edit]
War mein Fehler, dass ich die Blanks nicht berücksichtigt hatte ...
... und noch mehr, dass ich nicht bedacht hatte, dass Variable in VBS grundsätzlich global verwendet werden.
Ändere daher bitte in den beiden genannten Zeilen die Schleifenvariable "i" auf zB "Letter", also:
For Letter = Asc("A") To Asc("Z")
...
BaseFolder = "I:\-=[ " & Chr(Letter) & " ]=-\"
...
Grüße
bastla
[Edit]
Fehlerursache "globale Variablenverwendung" gefunden.
Mein oben angesprochener "Kurztest" hatte sich nur auf die oberste Ordnerebene und deren Namenskonventionen bezogen und kein tatsächliches "Verschieben" beinhaltet - daher war mir nicht aufgefallen, dass im "Sub MoveFolder" die ursprünglich im Hauptprogramm verwendete Schleifenvariable "i" einen neuen Wert erhält.
[/Edit]
Hallo Clubnite!
Wie lautet die genaue Regel für das Umbenennen? Ich hätte es so verstanden, dass in jedem Ordnernamen mit dem Bestandteil "]" der dahinter folgende Teil durch Blank und "WANT" ersetzt werden soll, was dann allerdings auch bereits die im Root liegenden Ordner "I:\-=[ A ]=-\" etc beträfe).
Zu suchen wären Ordner, welche ausschließlich Dateien (oder doch auch Unterordner) enthalten, wobei dies nur Dateien eines vorgegebenen Typs sein dürfen?
Sollen die gefundenen Ordner dann inklusive Dateien (und ggf Unterordner) verschoben (bzw, wenn das Ziel eine andere Partition ist, wie oben bereits erwähnt, kopiert und am ursprünglichen Ort gelöscht) werden?
Grüße
bastla
P.S.: Ich helfe gerne (im Rahmen meiner, natürlich auch zeitlich begrenzten, Möglichkeiten). Dass Du aus dieser Tatsache bzw aufgrund meiner bisherigen Unterstützung nicht eine Art "Anspruch" ableiten willst, ist meiner Motivation sicher förderlich.
du hast diese stelle BaseFolder = "I:\-=[ " & Chr(Letter) & " ]=-\" nur um einen space pro seite erweitert. ich hab es nochmals um jeweils einen weiteren space angepasst ...
In diesem Zusammenhang möchte ich Dich auf die Möglichkeit, nicht nur Programmcode, sondern etwa auch Daten, bei denen es, so wie hier, auf einzelne Zeichen ankommt, der besseren Lesbarkeit wegen unter < code>-Tags (ohne das Leerzeichen) zu setzen, also etwaI:\-=[ A ]=-\
wäre es aufwendig, die verschobenen im Temp-ordner lagernden ordner vielleicht mit einem anderen script der art zu handlen, dass man den aktuellen namen einliest, z.b. [ 001 ] Neuer Ordner_Neuer Ordner 1 und alles rechtsseitig des chars ] gegen den string WANT ersetzt, sodass der bsp. ordner dann [ 001 ] WANT heißt?
Da die Ordnerstruktur ohnehin neu erstellt werden muss, ließe sich das in den "Verschiebe"-Teil einarbeiten oder natürlich auch in einem weiteren Script bewerkstelligen.Wie lautet die genaue Regel für das Umbenennen? Ich hätte es so verstanden, dass in jedem Ordnernamen mit dem Bestandteil "]" der dahinter folgende Teil durch Blank und "WANT" ersetzt werden soll, was dann allerdings auch bereits die im Root liegenden Ordner "I:\-=[ A ]=-\" etc beträfe).
... modifikation in die richtung vorzunehmen, per interaktion nach ordnern zu suchen, die nur einen vom nutzer vorgebbaren typ datei beinhalten ...
Auch hierzu eine Bitte um Klarstellung:Zu suchen wären Ordner, welche ausschließlich Dateien (oder doch auch Unterordner) enthalten, wobei dies nur Dateien eines vorgegebenen Typs sein dürfen?
Sollen die gefundenen Ordner dann inklusive Dateien (und ggf Unterordner) verschoben (bzw, wenn das Ziel eine andere Partition ist, wie oben bereits erwähnt, kopiert und am ursprünglichen Ort gelöscht) werden?
Grüße
bastla
P.S.: Ich helfe gerne (im Rahmen meiner, natürlich auch zeitlich begrenzten, Möglichkeiten). Dass Du aus dieser Tatsache bzw aufgrund meiner bisherigen Unterstützung nicht eine Art "Anspruch" ableiten willst, ist meiner Motivation sicher förderlich.
Hallo Clubnite!
) werden in der aktuellen Scriptfassung nicht berücksichtigt.
Zusammenfassend würde daraus folgende Reihenfolge der Überprüfung resultieren:
Soferne verschoben wird, soll aber noch nicht sofort die Umbenennung erfolgen, um noch eine Überprüfung zu ermöglichen - daher wäre für diesen Zweck dann ein weiteres Script zuständig.
Noch ein Hinweis zur Formatierung: Zitate kannst Du einfach mit "> " einleiten ...
Grüße
bastla
... wenn sie ordner enthalten, so heißen diese unterordner irgendwas mit "complete" und die solche header-ordner beinhaltenden ordner scheiden vom ganzen procedere aus. diese sache haben wir ja schon erfolgreich im griff.
Eigentlich nicht - bisher werden nur leere Ordner näher untersucht, und daher wird nur unter der Voraussetzung, dass der Ordner leer ist, noch zusätzlich der Ordnername überprüft, sodass nur die "Header"-Ordner selbst ausscheiden. Ordnerinhalte (außer deren Absenz wenn [ Arm 001 ] Neuer Ordner_Neuer Ordner 1 einen solchen headerordner beinhaltet, ist alles in ordnung und er bleibt unberührt
Soferne also ein Ordner zumindest einen Unterordner mit dem Namensbestandteil "complete" enthält, ist dieser Ordner, unabhängig von enthaltenen Dateien und weiteren Unterordnern, zu ignorieren?die anvisierten ordner sollten entweder ganz leer sein, oder aber dateien vom typ .txt, .nfo, .jpg, .gif, .bmp, .png, .message enthalten.
Bedeutet das, dass Du nicht nach einzelnen Dateitypen suchen, sondern eine Liste von Typen vorgeben und nur Ordner verschieben willst, in denen (mindestens eine? / ausschließlich?) in der Liste angeführte Dateien enthalten sind (und die natürlich nicht schon aufgrund der oben angeführten Kriterien ausgeschieden sind)?Zusammenfassend würde daraus folgende Reihenfolge der Überprüfung resultieren:
1) Enthält der Name des Ordners den Bestandteil "complete" oder "WANT"?
- Wenn ja: Ordner übergehen; ansonsten:
2) Enthält der Ordner einen Unterordner mit dem Namensbestandteil "complete" oder "WANT"?
- Wenn ja: Ordner übergehen; ansonsten:
3) Enthält der Ordner Unterordner mit anderem Namen?
- Wenn ja: Sollte es nach Deiner Beschreibung eigentlich nicht geben (... wenn sie ordner enthalten, so heißen diese unterordner irgendwas mit "complete" ...) - falls doch: ?
- Wenn nein:
4) Enthält der Ordner Dateien?
- Wenn nein: Ordner ist leer und wird verschoben; ansonsten:
5) Ist zumindest eine Datei aus der angegebenen Dateitypenliste enthalten?
- Wenn ja: Ordner wird verschoben.
Noch ein Hinweis zur Formatierung: Zitate kannst Du einfach mit "> " einleiten ...
Grüße
bastla