130834
Goto Top

FOR R Ordner Filterung? KLAMMERAUF BATCH KLAMMERZU

Hallo Leute

Ich bins wieder mit einer netten Frage über cmd.
Wie immer.

Also es geht darum das ich ein Skript habe, das schlicht weg alles
und eben doch nicht alles durchsuchen soll.

Es handelt in etwa so;

Nimm jeden Buchstaben im Alphabet und ruf die sub Funktion 1 auf

Sub Funktion 1 überprüft dann ob dieses Laufwerk existiert, und falls ja tut es folgendes:

Für Alle Dateien die bestimmte Erweiterungen haben ( welche im der Master File Table Variable gespeichert sind )
gib deren Pfad in eine Datei aus.

Meine Master File Table Variable enthält momentan wegen den Tests nur etwa 7 Endungen.
Und Trotzdem dauert es sehr lange.

Das ist aber nicht mein Problem, es kann von mir aus lange dauern, ABER:
Bestimmte Ordner wie z.b. Adobe möchte ich nicht durchsuchen lassen.

Denn: Sie enthalten etwa 3000 .png's und Diese werden alle aufgelistet, ich will sie aber weder haben
( das mit dem nicht-haben lässt sich mit einer findstr /v lösen )

und auch gar nicht erst verarbeiten, denn ihr könnt euch ja denken wie lange das dauert.

Das Zeil des Skripts ist einfach, Dateien mit bestimmten Endungen zu finden, welche mehr oder weniger dem Nutzer gehören.
So kann man sich ganz gut einen Überblick machen was man so hat. Die ganzen System Dateien stören dabei nur.
( Bitte NICHT darauf festnageln. Ich suche nach einer Lösung mit der vorgegebenen Funktion, nicht nach einer Lösung alle Nutzer-Dateien aufzulisten )

Nun stehe ich etwas an. Lasse ich die FINDSTR Funktion bei jedem Ordner laufen, dauert das überprüfen in etwa 7 mal so lange.
Zuerst habe ich gedacht, ich lasse einfach eine DIR für das Laufwerk laufen, und darüber eine FINDSTR.

Leider ist mir das eigentlich zu ungenau, da sich ja manche Programme auch unterhalb Ordner von z.b. C:\ einschreiben.
Also weder bei jedem loop überprüfen noch Nur im obersten Laufwerk überprüfen.

Ich könnte zwar JEDEN Ordner listen lassen, dann alle ungewollten rausfiltern und dann erst die Dateien suchen lassen.
Ich glaube aber das das noch viel länger dauern würde als alles andere.


Gibt es Irgendeinen Weg bestimmte Schlüsselwörter aus einem DIR Befehl oder einem FOR /R Befehl zu enthalten?

Wäre für eine Antwort sehr dankbar face-smile

lg clragon

Content-Key: 326206

Url: https://administrator.de/contentid/326206

Printed on: April 25, 2024 at 21:04 o'clock

Member: rubberman
Solution rubberman Jan 12, 2017 at 23:32:42 (UTC)
Goto Top
Hallo clragon.

Beispielhaft:
for /f "tokens=*" %%i in (  
  'robocopy C:\. NULL *.txt *.log /xd windows* program* /l /s /ndl /xx /nc /ns /njh /njs /fp'  
) do echo %%i
... listet alle *.txt und *.log Dateien auf C:, schließt Verzeichnisse die mit windows oder program beginnen aus.

Grüße
rubberman
Member: mayho33
mayho33 Jan 13, 2017 at 00:52:00 (UTC)
Goto Top
Muss es ein Batch sein?

In C# könnstest du in etwa sowas machen. Wäre auch viel schneller:

string filesTMP;
List<string> files = new List<string>();
strin> ExtensionPattern = {"*.txt", "*.pdf"};  

Foreach (var pattern in ExtensionPattern)
{
try
{
    filesTMP = Directory.GetFiles(@"C:\ProgramData", pattern, SearchOption.AllDirectories);  
}
catch{} 
   foreach(var file in filesTMP)
    {
        files.add(file);
    }
}
//weiterverarbeitung
Mitglied: 130834
130834 Jan 13, 2017 at 16:49:34 (UTC)
Goto Top
Naja... Das Haupt-Skript, welches diese Funktion aufruft, ist in Batch.
Ich könnte den Code nur als Zusatztool verwenden, und ich glaube der Parameter würde etwas schwer werden, da sind etwa 40 Begriffe bei.
Zwar ist die Schnelligkeit sicher ein Vorteil, aber bevor ich nicht C++ gelernt habe, werde ich alles in Batch schreiben.
Mitglied: 130834
130834 Jan 13, 2017 at 17:08:05 (UTC)
Goto Top
Funktioniert sehr gut.
Ich fühl mich aber etwas unsicher, das ohne "" zu verwenden, mach ich aber welche stürzt es ab.
Ist zwar kein Problem für mich, gibt es aber einen Weg die Parameter mit "" zu schreiben?
Member: rubberman
rubberman Jan 13, 2017 at 18:10:51 (UTC)
Goto Top
Kann dein Problem nicht nachvollziehen.
for /f "tokens=*" %%i in (  
  'robocopy "C:\." NULL "*.txt" "*.log" /xd "windows*" "program*" /l /s /ndl /xx /nc /ns /njh /njs /fp'  
) do echo %%i
... tut genau was es soll.
Mitglied: 130834
130834 Jan 13, 2017 at 18:55:11 (UTC)
Goto Top
Oh. Verstehe. Perfekt. Der Code läuft schnell und effizient!
Er hat auch ohne die "" sehr gut funktioniert.
Nur noch eine Frage;
Wird die Gross - und Klein Schreibung ignoriert?
bei den Schlüsselwörtern nach /xd wäre mir das sehr wichtig, dass Gross und Keinschreibung ignoriert wird.
Der Help befehl scheint mir dazu nichts sagen zu können.
Wäre nett, danke.
Member: rubberman
rubberman Jan 13, 2017 at 19:13:03 (UTC)
Goto Top
Jap. Da Windows selbst Groß-/Kleinschreibung bei Pfaden gleichbehandelt, wird es bei ROBOCOPY auch ignoriert. Es ist ein Tool das auf das Dateisystem losgelassen wird, keines das Zeichenfolgen verarbeiten soll face-wink
Mitglied: 130834
130834 Jan 13, 2017 at 19:28:18 (UTC)
Goto Top
Verstehe. Interessant! Was wenn 2 Ordner theoretisch die selben Namen haben, welche sich nur durch Gross- und Kleinschreibung unterscheiden?
Was macht Windows dann?
Member: rubberman
rubberman Jan 13, 2017 at 19:39:14 (UTC)
Goto Top
Probier's aus. Wenn sie im selben Verzeichnis liegen, bekommst du den zweiten nicht mal angelegt...