Verzeichnisbaum über Nacht aktualisieren

German support forum

Moderators: Hacker, Stefan2, white

User avatar
Peter
Power Member
Power Member
Posts: 2068
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Re: Abschlussfrage

Post by *Peter »

cptpicard wrote:.... Die Laufzeit dürfte für eine normal gefüllte Festplatte oder ein Netzlaufwerk nicht ausreichen.
Ich habe es nun laufen lassen - nach 300 sek (= 5 min) hat er 5000 Zeilen erstellt, die treeinfo.wc hat 423 kB. Da mir die Erfahrung fehlt nun die etwas schlichte Frage - ist das schnell, normal oder laaangsam?

(Die volle treeinfo.wc erstellt der TC in 13 min mit 30.000 Zeilen und 2.7 MB Dateigrösse.)

Peter
TC 10.xx / #266191
Win 10 x64
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50561
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Das ist ja riesig - für solche Grössen ist die Funktion leider nicht gedacht. Ich würde an Ihrer Stelle deshalb auf den Alt+F10-Baum verzichten und dafür mit History und Hotlist arbeiten, eventuell auch mit LNK-Dateien in einem zentralen Verzeichnis.
Author of Total Commander
https://www.ghisler.com
cptpicard
Junior Member
Junior Member
Posts: 31
Joined: 2005-08-25, 17:58 UTC

Re: Abschlussfrage

Post by *cptpicard »

Peter wrote:ist das schnell, normal oder laaangsam?
Das VBScript ist etwas langsamer als die TC-Routine zum Erstellen der treeinfo.wc.

Bei 30.000 Verzeichnissen auf einem Laufwerk würde ich überlegen, ob die Partition vielleicht zu groß gewählt ist, oder ob du mit der Reduzierung der Verzeichnistiefe arbeiten kannst, um die Datei und die Anzahl der Verzeichniseinträge zu minimieren.
User avatar
Peter
Power Member
Power Member
Posts: 2068
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

Danke für die Infos.
ghisler(Author) wrote:... und dafür mit History und Hotlist arbeiten, eventuell auch mit LNK-Dateien in einem zentralen Verzeichnis.
History und Hotlist werden von mir auch verwendet, um "in meinem Aufgabenbereich" zu arbeiten. Und im Bedarfsfall muss ich schnell "überall" sein, daher brauche ich die treeinfo.wc auch - zumindest in der gekürzten Form.
cptpicard wrote:Bei 30.000 Verzeichnissen auf einem Laufwerk würde ich überlegen, ob die Partition vielleicht zu groß gewählt ist, oder ob du mit der Reduzierung der Verzeichnistiefe arbeiten kannst, um die Datei und die Anzahl der Verzeichniseinträge zu minimieren.
Die Verkleinerung der Datenmenge ist angedacht, wird aber noch Abklärung brauchen. Die Verzeichnistiefe kann ich nicht kürzen, die brauche ich.

Aber zwei Fragen eines bekennenden Skript-Laien:

1) Ist es mit dem Skript möglich, die Verzeichnistiefe per Stichwort zu begrenzen? "Wenn du das Wort PROJEKT findest, dann gehe nicht tiefer." (c:\daten\test\Projekt\123\docs\alte_Daten; c:\daten\Projekt\456\text\neues)

2) Ist es möglich, gewisse Datenstrukturen zu überspringen? c:\daten\DAS_WILL_ICH_NICHT\test\docs (eigentlich fast ähnlich wie Frage 1. In meinem Fall müssten beide Kriterien gleichzeitig laufen.)

Peter
TC 10.xx / #266191
Win 10 x64
cptpicard
Junior Member
Junior Member
Posts: 31
Joined: 2005-08-25, 17:58 UTC

Post by *cptpicard »

Ja, das Ausschließen von einem oder mehreren Verzeichnissen ist möglich. Den Code dazu poste ich heute abend.
User avatar
Peter
Power Member
Power Member
Posts: 2068
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

Das ist fein - danke.

Peter
TC 10.xx / #266191
Win 10 x64
cptpicard
Junior Member
Junior Member
Posts: 31
Joined: 2005-08-25, 17:58 UTC

Post by *cptpicard »

So....

für den Ausschluß von Verzeichnissen werden regexp verwendet wie hier beschrieben:
http://msdn.microsoft.com/library/en-us/script56/html/vsproPattern.asp

Ist wohl nur ganz leicht verwandt mit der Perl-Syntax. :cry:

Naja, wie dem auch sei, spiel einfach ein wenig damit rum und editiere dazu die entsprechenden Zeilen. Denke daran das Array pattern() entsprechend rauf oder runterzusetzen, in Abhängigkeit zur Anzahl deiner Begriffe.

Verglichen wird immer die gesamte Pfadangabe, also z.B. "C:\windows\system32\drivers". Bei Treffer, wird der Ordner und alle Unterordner übersprungen und nicht in die treeinfo.wc geschrieben.

Code: Select all

'Erstellen einer TC-treeinfo-Datei per WSH
Option Explicit

' RegExp to exclude Dirs & Subdirs
' ***         Edit to your needs           ***
Dim pattern(1)

Sub Set_Pattern()
 regEx.IgnoreCase = True   ' Set case insensitivity
 pattern(0) = "\\system32\\"
 pattern(1) = "Programme"
End Sub
' ***         End Edit                     ***

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

Dim vol, tcfile, depth, ts

Dim regEx
Set regEx = New RegExp

Main()

Sub Main()
Dim objArgs
Set objArgs = Wscript.Arguments

vol = objArgs(0)
depth = CLng(objArgs(1))
tcfile = vol & ":\treeinfo.wc"

If fso.FileExists(tcfile) Then
    fso.DeleteFile tcfile, True
End If

Set ts = fso.CreateTextFile(tcfile, True)

Set_Pattern
ReadFolders "", 1

ts.Close

Set tcfile = fso.GetFile(tcfile)
tcfile.Attributes = 2
End Sub

Sub ReadFolders(Entry, ByVal z)
Dim i, regexpmatch

If z > depth And depth > 0 Then
    Exit Sub
End If

z = z + 1

Dim folders, folder

If Entry = "" Then
    Set folders = fso.GetFolder(vol & ":\")
Else
    Set folders = fso.GetFolder(Entry)
End If

Set folder = folders.SubFolders

For Each folder In folders.SubFolders
    For i = 0 To UBound(pattern)
        regEx.pattern = pattern(i)
        If regEx.Test(folder.Path) Then
            regexpmatch = True
        End If
    Next
    
    If Not regexpmatch Then
        ts.WriteLine "[" & Mid(folder.Path, 4) & "]"
        ReadFolders folder.Path, z
    End If
    regexpmatch = False
Next
End Sub
Ansonsten können die regexp-Gurus ja mal etwas zu den Suchmustern drunterschreiben.
User avatar
Peter
Power Member
Power Member
Posts: 2068
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

cptpicard,

läuft ausgezeichnet, die Geschichte. Herzlichen Dank. :D

Peter

PS: jetzt brauchen wir nur noch jemanden, der den Zaubertrick in den TC direkt einbaut (in Alt-F10), das Ganze optionsgesteuert statt hardcodiert macht - und auch andere sind froh, nicht nur ich.
TC 10.xx / #266191
Win 10 x64
User avatar
Horst.Epp
Power Member
Power Member
Posts: 6981
Joined: 2003-02-06, 17:36 UTC
Location: Germany

Post by *Horst.Epp »

Mal ein ganz anderer Vorschlag.
Ich verwende Locate32 um einen vollständigen Plattenindex zu bekommen.
Damit kann ich dann per RegEx nach Files oder Verzeichnissen suchen.
Ich bekomme die Antwort in Sekunden und kann die Fundstelle direkt im TC anspringen lassen.
Zusätzlich zu lokalen Drives lassen wir auch Netzwerk Shares per UNC indexieren.
Das ganze ist Freeware und lässt sich weitgehend konfigurieren.
Seit dem ich das habe benutze ich keine Treeinfo im TC mehr.
http://www.uku.fi/~jmhuttun/english/softwares.shtml
cptpicard
Junior Member
Junior Member
Posts: 31
Joined: 2005-08-25, 17:58 UTC

Post by *cptpicard »

Interessanter Ansatz. Danke dafür.
Horst.Epp wrote:... und kann die Fundstelle direkt im TC anspringen lassen....
Und wie genau machst du das? Kann das Toolchen einen Kommandozeilenaufruf für den TC absetzen oder wie geht das ?

Ich habe mir das Tool noch nicht angeschaut....
User avatar
Horst.Epp
Power Member
Power Member
Posts: 6981
Joined: 2003-02-06, 17:36 UTC
Location: Germany

Post by *Horst.Epp »

cptpicard wrote:Interessanter Ansatz. Danke dafür.
Horst.Epp wrote:... und kann die Fundstelle direkt im TC anspringen lassen....
Und wie genau machst du das? Kann das Toolchen einen Kommandozeilenaufruf für den TC absetzen oder wie geht das ?

Ich habe mir das Tool noch nicht angeschaut....
Options Settings Advanced
Use other program t open folder
c:\Program Files\wincmd\TOTALCMD.EXE /o "%d"

Dann einen beliebigen Hotkey unter Options Settings Keyboard Shortcuts
z.B. Ctrl-F für "Open containing Folder"
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Post by *Sheepdog »

Horst.Epp wrote:Und wie genau machst du das?
Wenn man in den SendTo Ordner einen Link zum TC placiert, dann kann man auch übers Kontextmenü 'Senden an' benutzen.

sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Post by *Sheepdog »

Horst.Epp wrote: c:\Program Files\wincmd\TOTALCMD.EXE /o "%d"
Mit diesen Parametern kann man noch ein wenig feintunen, wie man das Verzeichnis geöffnet haben möchte.

Code: Select all

/O	Falls Total Commander bereits läuft, aktivieren und Pfad(e) an dieses Programm übergeben (übergeht Einstellung im Konfigurationsdialog für mehrere Kopien von Total Commander gleichzeitig)

/N	Öffne auf jeden Fall neues Total Commander-Fenster (übergeht Einstellung im Konfigurationsdialog für nur 1 Kopie von Total Commander gleichzeitig)
/L=	Setze Pfad des linken Fensters
/R=	Setze Pfad des rechten Fensters
/S	Interpretiert die übergebenen Verzeichnisse als Quelle/Ziel statt links/rechts (für Benutzung mit /O). Beispielsweise wird ein mit /R= übergebenes Verzeichnis als Zielverzeichnis verstanden.
/T	Öffnet die übergebenen Verzeichnisse in neuen Tabs (für Benutzung mit /O)

/P=	Setzt aktives Panel beim Programmstart: /P=L links, /P=R rechts. Hat Vorrang vor wincmd.ini-Option ActiveRight=
So wäre z.B. '/O /S /R="%d"' öffne den Ordner im gerade inaktiven Tab.

sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Post Reply