freel0rd
Goto Top

Batch-File Verzeichnis von Suche ausschließen

Hallo zusammen,
zunächst muss ich sagen, dass das hier wirklich eine super Plattform ist, die mir schon das ein oder andere Mal weitergeholfen hat! face-smile

Zu meinem Problem:

Ich habe ein Batch-Skript erstellt, welches auf einem Rechner alle Verzeichnisse mit Unterverzeichnissen bestimmten Dateien durchsucht. Durchsucht wird dabei die komplette Platte C:\, was auch so gewollt ist. Um die Performance zu erhöhen, würde ich aber gerne das komplette Verzeichnis C:\Windows von der Suche ausschließen.

Bevor ich in meine Suchschleife gehe, habe ich mit
set dir=c:\
mein Suchverzeichnis definiert. Wie kann ich nun meine Suche dahingehend einschränken, dass C:\Windows davon ausgenommen wird? Leider konnte ich da nichts passendes finden.

Vielen Dank schonmal für Eure Hilfe!

Viele Grüße,
freel0rd

Content-Key: 123699

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

Ausgedruckt am: 29.03.2024 um 06:03 Uhr

Mitglied: Biber
Biber 28.08.2009 um 11:17:25 Uhr
Goto Top
Moin freel0rd,

willkommen im Forum.
Zitat von @freel0rd:
Ich habe ein Batch-Skript erstellt, welches auf einem Rechner alle Verzeichnisse mit Unterverzeichnissen bestimmten Dateien durchsucht.
Zeich doch ma!

Bevor ich in meine Suchschleife gehe, habe ich mit
set dir=c:\
mein Suchverzeichnis definiert.
Aahhh - ist das diese Zeile 8, in der Suchschleife anfängt? *Glaskugel putz*

Menno - wir beantworten ja nun wirklich gerne Fragen zu Skripten.
Aber das geht doch besser, wenn wir wissen worum es geht.

Bitte poste das komplette Fragment.

Grüße
Biber
Mitglied: freel0rd
freel0rd 28.08.2009 um 11:35:40 Uhr
Goto Top
Sorry, mein Fehler.
Hier der vollständige Code. Ist bisher nur im Teststadium, es ist noch eine Prüfung drin, ob das .pst-File mehr als 1 MB hat. Es geht mir wie gesagt nur darum, C:\Windows von der Suche auszunehmen, weil dadurch die Performance leidet.

@echo off

set dir=c:\
set file=*.pst
set size=%%~zp

REM ====SUCHE NACH .PST FILES ÜBER 1MB AUF C:\=======
:pst
for /r "%dir%" %%p in ("%file%") do (  
	if %size% geq 1000000 goto found
	)
goto end

REM ====.PST-FILE MIT MEHR ALS 1MB GEFUNDEN==========
:found
echo %%p >> %systemdrive%\temp\pst.txt
goto pst

:end
exit
Mitglied: pieh-ejdsch
pieh-ejdsch 28.08.2009 um 13:50:15 Uhr
Goto Top
Hallo freel0rd,

Hach wo fang ich denn an?


Zeile 09. goto found - machst Du zu: call found "%p"
Zeile 16. echo %%p - funktioniert net in der Subroutine da %%p als For-SchleifenVariable deklariert ist und die For-Schleife in Deiner Zeile 11. mit der schliessenden Klammer beendetet wird und auch hinter diesser schliessenden Klammer kein weiterer Befehl auftaucht. Und es werden nur UmgebungsVariablen und Parameter an Subroutinen Vererbt bzw Weitergegeben. Machst Du aus: %%p - ein: %1 - damit dort der Parameter in die pst.txt reingeschrieben wird.
Zeile 17.mit goto pst - machst Du Dir eine Endlosschleife, welche immer wieder von vorn beginnt und unzählige Forschleifen öffnet. Das ist wiederrum führt dazu dass Deine For-Schleife nie beendet wird. machst Du daraus ein: goto eof
Zeile 12. goto end - schreibst Du als: goto eof
:end und exit kannste weglassen da Batches beim erreichen vom Ende automatisch schliessen bzw diese wird ja mit: goto eof - beendet

Suchts Du nach 1MiB großen Daeteien dann brauchst Du 1048576 als Grössenvergleich das entspricht dem einen MB im Windows.

zum Schluss der einzeiler für die cmd
for /r "c:\" %p in ("*.pst") do @echo "%~dpp" |findstr "C:\Windows">nul||if "%~zp" gtr "1000000" @echo %~p>>%systemdrive%\temp\pst.txt  
der Unterordner sollte existieren: %systemdrive%\tmp
eventeuell als Prüfung am beginn in die Batch einbauen.
Mitglied: Biber
Biber 28.08.2009 um 15:05:12 Uhr
Goto Top
Moin freel0rd,

oder zumindest Deine bisherige Zeile 9 ändern, damit die Verzeichnisebene unterhalb von "C:\" Verzeichnis für Verzeichnis geprüft werden kann.

... also eine Außen-FOR/D-Innen-FOR/R-Anweisung:

...
FOR /D %%p in ("%dir%\*") DO IF  /i "%%~np" NEQ "windows"  Call:FOR_R "%i"
Goto :eof

:FOR_R Parameter 1 ist das (jeweilige) Start-Directory
       FOR /F "%~1" %%i in ("%file%") do ( 
           ....
               (wie jetzt)
...  )
Goto :eof

Grüße
Biber
Mitglied: freel0rd
freel0rd 31.08.2009 um 14:38:10 Uhr
Goto Top
Hallo pieh-ejdsch & Biber,

zunächst einmal herzlichen Dank für eure ausführlichen Antworten. Bin leider bisher nicht dazu gekommen, euren Tips zu folgen, aber ich werde das nachholen.

Viele Grüße,
freel0rd