highend01
Goto Top

Mehrere Verzeichnisse durchsuchen um eine Datei zu finden

Hallo zusammen.

OS: Windows 7 x64

Ich möchte gern mehrere Verzeichnisse durchsuchen, um eine bestimmte Datei zu finden.

@echo off
SET "findFileName=btest.exe"  
SET "searchFolders=%SystemRoot%\System32 %SystemRoot%\SysWOW64"  
FOR %%A IN (%searchFolders%) DO (
	DIR /B "%%A" | FINDSTR /IL "%findFileName%"  
	echo %errorlevel% 
)

Ich habe hier aber eine ganze Reihe von Problemen ;(

1. Gibt es eine Möglichkeit, ein anderes Trennzeichen als ein Leerzeichen für die zu durchsuchenden Ordner zu wählen? Ansonsten sieht es dumm aus, wenn ich in einem Verzeichnis suchen will, welches selber Leerzeichen aufweist.

2. Der Errorlevel ist immer 0, egal ob überhaupt eine Datei gefunden wird, oder nicht... Darauf kann ich natürlich nicht vernünftig reagieren (ich würde per GOTO aus der FOR Schleife rausspringen, sobald ein Treffer gefunden wird).

Was hab ich übersehen?

Danke und Gruß,
highend01

Content-ID: 196709

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

Ausgedruckt am: 18.12.2024 um 19:12 Uhr

bastla
bastla 09.01.2013 aktualisiert um 17:16:56 Uhr
Goto Top
Hallo Highend01!

zu 1.
Du kannst doch einfach die jeweiligen Pfade unter Anführungszeichen setzen:
set searchFolders="%SystemRoot%\System32" "%SystemRoot%\SysWOW64"
zu 2.
Aus Schleifen zu springen würde ich grundsätzlich nicht empfehlen - je nachdem, was Du weiter vor hast, könntest Du eine (Schalter-)Variable verwenden:
set "Gefunden="  
for %%a in (%searchFolders%) do if exist "%%~a\%findFileName%" set "Gefunden=%%~a"  
if defined Gefunden echo %findFileName% in %Gefunden% gefunden.
Um nach dem ersten Fund keine weiteren Ordner mehr zu durchsuchen (als Ersatz für die Zeile 2):
for %%a in (%searchFolders%) do if not defined Gefunden if exist "%%~a\%findFileName%" set "Gefunden=%%~a"
Analog dazu, wenn auch Unterordner durchsucht werden sollen:
set "Gefunden="  
for %%a in (%searchFolders%) do for /f "delims=" %%i in ('dir /s/b/a-d "%%~a\%findFileName%"') do set "Gefunden=%%i"  
if defined Gefunden echo %findFileName% in %Gefunden% gefunden.
oder
for %%a in (%searchFolders%) do if not defined Gefunden for /f "delims=" %%i in ('dir /s/b/a-d "%%~a\%findFileName%"') do set "Gefunden=%%i"
Grüße
bastla
Highend01
Highend01 09.01.2013 um 21:55:48 Uhr
Goto Top
Herzlichen Dank, bastla!
pieh-ejdsch
pieh-ejdsch 09.01.2013 aktualisiert um 22:43:29 Uhr
Goto Top
moin,

Eigentlich gibt es dafür die etwas unschön aussehende For-Erweiterung
%~dpnx$PATH:I
Welche die/den erste Gefundene Datei/Ordner in einer mit Semikolon getrennten Auflistung von Verzeichnissen aus einer Variable Erweitert.

set "searchFolders=%SystemRoot%\System32;%SystemRoot%\SysWOW64"  
for %%i in (btest.exe) do if "%%~$searchFolders:i" neq "" echo %%~$searchFolders:i  

Gruß Phil