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.
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 196709
Url: https://administrator.de/contentid/196709
Ausgedruckt am: 18.12.2024 um 19:12 Uhr
3 Kommentare
Neuester Kommentar
Hallo Highend01!
zu 1.
Du kannst doch einfach die jeweiligen Pfade unter Anführungszeichen setzen:
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:
Um nach dem ersten Fund keine weiteren Ordner mehr zu durchsuchen (als Ersatz für die Zeile 2):
Analog dazu, wenn auch Unterordner durchsucht werden sollen:
oder
Grüße
bastla
zu 1.
Du kannst doch einfach die jeweiligen Pfade unter Anführungszeichen setzen:
set searchFolders="%SystemRoot%\System32" "%SystemRoot%\SysWOW64"
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.
for %%a in (%searchFolders%) do if not defined Gefunden if exist "%%~a\%findFileName%" set "Gefunden=%%~a"
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.
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"
bastla
moin,
Eigentlich gibt es dafür die etwas unschön aussehende For-Erweiterung
Welche die/den erste Gefundene Datei/Ordner in einer mit Semikolon getrennten Auflistung von Verzeichnissen aus einer Variable Erweitert.
Gruß Phil
Eigentlich gibt es dafür die etwas unschön aussehende For-Erweiterung
%~dpnx$PATH:I
set "searchFolders=%SystemRoot%\System32;%SystemRoot%\SysWOW64"
for %%i in (btest.exe) do if "%%~$searchFolders:i" neq "" echo %%~$searchFolders:i
Gruß Phil