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-Key: 196709

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

Printed on: April 24, 2024 at 05:04 o'clock

Member: bastla
bastla Jan 09, 2013 updated at 16:16:56 (UTC)
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
Member: Highend01
Highend01 Jan 09, 2013 at 20:55:48 (UTC)
Goto Top
Herzlichen Dank, bastla!
Member: pieh-ejdsch
pieh-ejdsch Jan 09, 2013 updated at 21:43:29 (UTC)
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