Nach Datei in Ordner samt Unterordner suchen
hi, ich möchte nach einer Datei in einem Ordner und allen Unterordnern suchen.
Die Batch-Datei selbst befindet sich dabei einen Ordnerbaum höher als der Ordner, welcher durchsucht werden soll.
Wenn die Datei gefunden wird möchte ich den Pfad ausgegeben haben in einer Variablen.
Ist es auch möglich weitere Pfade auszugeben, wenn die Datei an meheren Orten ist?
set gesuchtedatei=info.txt
set fundort1
set fundort2
set fundort3
Die Batch-Datei selbst befindet sich dabei einen Ordnerbaum höher als der Ordner, welcher durchsucht werden soll.
Wenn die Datei gefunden wird möchte ich den Pfad ausgegeben haben in einer Variablen.
Ist es auch möglich weitere Pfade auszugeben, wenn die Datei an meheren Orten ist?
set gesuchtedatei=info.txt
set fundort1
set fundort2
set fundort3
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 5539875887
Url: https://administrator.de/contentid/5539875887
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
8 Kommentare
Neuester Kommentar
Moin,
ich habe hier einmal eine Lösung in Powershell, falls es wirklich Batch seien muss bin ich leider überfragt
Statt einzelne Variablen für die Dateien anzugeben, werden sie fortlaufen in einem Array gespeichert.
Grüße
Florian
ich habe hier einmal eine Lösung in Powershell, falls es wirklich Batch seien muss bin ich leider überfragt
[String] $zieldatei = "test.txt"
$items = Get-ChildItem -Path $PSScriptRoot -Recurse -Filter $zieldatei
$itemArray = @()
foreach ($item in $items) {
$itemArray += $item.FullName
}
$itemArray
Statt einzelne Variablen für die Dateien anzugeben, werden sie fortlaufen in einem Array gespeichert.
Grüße
Florian
Batch
PowerShell
G. Katrin
@echo off &setlocal enabledelayedexpansion
set "gesuchtedatei=info.txt"
for /f "delims=" %%a in ('dir /b /s /a-d "%~dp0%gesuchtedatei%"') do (
set "folder=%%~dpa"
echo Gefunden in : !folder!
)
$files = Get-ChildItem $psscriptroot -File -Recurse -Filter "info.txt"
$files
Moin,
Gruß Thomas
Zitat von @8030021182:
Batch
da fehlt aber noch der letzte Part:Batch
@echo off &setlocal enabledelayedexpansion
set "gesuchtedatei=info.txt"
for /f "delims=" %%a in ('dir /b /s /a-d "%~dp0%gesuchtedatei%"') do (
set "folder=%%~dpa"
echo Gefunden in : !folder!
)
Zitat von @o0Julia0o:
Ist es auch möglich weitere Pfade auszugeben, wenn die Datei an meheren Orten ist?
set gesuchtedatei=info.txt
set fundort1
set fundort2
set fundort3
Ist es auch möglich weitere Pfade auszugeben, wenn die Datei an meheren Orten ist?
set gesuchtedatei=info.txt
set fundort1
set fundort2
set fundort3
@echo off
set gesuchtedatei=info.txt
set zaehler=0
for /F "Delims=" %%A in ('dir /s /b /a-d "%gesuchtedatei%"') do call :Fund "%%~A"
if %zaehler% gtr 0 echo]Die Datei wurde %zaehler% mal gefunden.
pause
exit /b 0
:Fund
set /a zaehler+=1
set fundort%zaehler%=%~dp1
echo]Gefunden in: %~dp1
Gruß Thomas
Den Part hatte ich mir gespart, da man den Ordner ja eh schon in der Schleife als Variable im Zugriff hat und direkt verarbeiten kann.
Die Denke mit den separaten Variablen ist IMHO noch aus dem letzten Jahrhundert, oder macht derjenige der FOR-Loops noch nie gesehen hat. 🤪
Die Denke mit den separaten Variablen ist IMHO noch aus dem letzten Jahrhundert, oder macht derjenige der FOR-Loops noch nie gesehen hat. 🤪
Zitat von @8030021182:
Den Part hatte ich mir gespart, da man den Ordner ja eh schon in der Schleife als Variable im Zugriff hat und direkt verarbeiten kann.
Na dann hätte aber auch ein simples echo gereicht und man hätte sich das Zwischenspeichern in einer Variable komplett sparen können 😜Den Part hatte ich mir gespart, da man den Ordner ja eh schon in der Schleife als Variable im Zugriff hat und direkt verarbeiten kann.
Die Denke mit den separaten Variablen ist IMHO noch aus dem letzten Jahrhundert, oder macht derjenige der FOR-Loops noch nie gesehen hat. 🤪
Stimmt zwar, manchmal kommt es aber auch vor, das man die Orte irgendwann später im Skript erneut abarbeiten muss. So könnte man diese dann später mit "for /L" erneut abfrühstücken.Oder man startet das Skript mit "cmd /k" und hat dann später in der Kommandozeile Zugriff auf die Variablen.
Zitat von @TK1987:
Na dann hätte aber auch ein simples echo gereicht und man hätte sich das Zwischenspeichern in einer Variable komplett sparen können 😜
Ja klar, vermutlich hätts der TO dann aber wohl nicht ganz verstanden , das war quasi nur eine kleine "Gehhilfe" um zu verdeutlichen was was ist 🤗.Na dann hätte aber auch ein simples echo gereicht und man hätte sich das Zwischenspeichern in einer Variable komplett sparen können 😜
Zitat von @o0Julia0o:
ist überflüssig, da hier ja nur einer Zeile gerarbeitet wird. Es ist ja nicht einmal ein Trennzeichen definiert. Oder?
Standardmäßig sind Leerzeichen als Trennzeichen definiert. Falls der Pfad Leerzeichen enthält, wird nur alles bis zum ersten Leerzeichen verarbeitet, der Rest wird abgeschnitten. "Delims=" sorgt hier eben dafür, das kein Trennzeichen mehr definiert ist und somit der komplette Pfad inklusive Leerzeichen in der Schleifenvariable landet."Delims="
Die Datei wird jedoch nicht im Ordnerbaum höher gesucht.
Du hattest ja auch gesagt...Die Batch-Datei selbst befindet sich dabei einen Ordnerbaum höher als der Ordner, welcher durchsucht werden soll.
du meintest also, die Batchdatei liegt eine Ebene tiefer.Geht das, dass in "D:\Ordner1\Ordner2\" und dessen Unterordner nicht gesucht wird? Also da wo die Batch im Ordner liegt soll nicht gesucht werden. Auch nich in Unterordnern davon.
Sicher geht das:@echo off
set gesuchtedatei=info.txt
set zaehler=0
call :Elternpfad "%CD%"
for /F "Delims=" %%A in ('dir /b /ad "%pfad%*" ^| find /v "%ordner%"') do (
for /F "Delims=" %%B in ('dir /s /b /a-d "%pfad%%%~A\%gesuchtedatei%"') do call :Fund "%%~B"
)
if %zaehler% gtr 0 echo]Die Datei wurde %zaehler% mal gefunden.
pause
exit /b 0
:Elternpfad
set ordner=%~nx1
set pfad=%~dp1
exit /b 0
:Fund
set /a zaehler+=1
set fundort%zaehler%=%~dp1
echo]Gefunden in: %~dp1
Gruß Thomas