Batch Script welches Pfad zu allen a.txt Dateien ausgibt?
Hallo,
ich bin auf der Sucher nach einem Script welches einen Verzeichnispfad auf meiner
Festplatte nach "a.txt" durchsucht und mir dazu die dazugehörigen Pfade ausgibt.
Hat jemand eine Idee?
Vielen Dank!
Gruß
ich bin auf der Sucher nach einem Script welches einen Verzeichnispfad auf meiner
Festplatte nach "a.txt" durchsucht und mir dazu die dazugehörigen Pfade ausgibt.
Hat jemand eine Idee?
Vielen Dank!
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 141477
Url: https://administrator.de/forum/batch-script-welches-pfad-zu-allen-a-txt-dateien-ausgibt-141477.html
Ausgedruckt am: 06.04.2025 um 11:04 Uhr
16 Kommentare
Neuester Kommentar
Auf der Kommandozeile listet
alle Dateien namens "a.txt" in E:\PFAD und allen Unterverzeichnissen auf, vollständig mit Pfad.
gibt nur die Pfade zurück. Allerdings auch mehrfach, wenn es mehr als ein Treffer pro Verzeichnis gibt.
Hast Du wirklich vorher schon alles durchprobiert gehabt?
Gruss,
Ede
for /R E:\PFAD %i in (a.txt) do @echo %i
alle Dateien namens "a.txt" in E:\PFAD und allen Unterverzeichnissen auf, vollständig mit Pfad.
for /R E:\PFAD %i in (a.txt) do @echo %~pi
gibt nur die Pfade zurück. Allerdings auch mehrfach, wenn es mehr als ein Treffer pro Verzeichnis gibt.
Hast Du wirklich vorher schon alles durchprobiert gehabt?
Gruss,
Ede
@edepfau
Schaut auch lustig aus, wenn Du
draus machst ... 
Insofern würde ich Danis Ansatz bevorzugen (und zur Not mit "
Grüße
bastla
Schaut auch lustig aus, wenn Du
for /R E:\PFAD %i in (ichbinnichtda.txt) do @echo %i
Insofern würde ich Danis Ansatz bevorzugen (und zur Not mit "
/a-d
" ergänzen).Grüße
bastla
das scheint eine Eigenart der for-Schleife zu sein..kann aber sehr einfach durch
behoben werden.
Inzwischen habe ich mich darum gekümmert, den uniq-Befehl nachzubilden, damit die Pfade nur einmal angezeigt werden.
Das geht in einem Batchfile z.B. so
Als erster Parameter wird der Dateiname oder ein Muster erwartet (*.log). Ausserdem werden hier Pfade mit Leerzeichen richtig behandelt.
Der Vorschlag mit "dir /s" hat den Nachteil, dass keine Pfade aufgelistet werden.
for /R E:\PFAD %i in (a.txt) do @if exist %i echo %~pi
behoben werden.
Inzwischen habe ich mich darum gekümmert, den uniq-Befehl nachzubilden, damit die Pfade nur einmal angezeigt werden.
Das geht in einem Batchfile z.B. so
@echo off
for /R E:\PFAD %%i in (%1) do @if exist %%i CALL :COMP "%%~pi"
set _last=
set _this=
goto :EOF
:COMP
set _this=%~1
if defined _last (
if not "%_last%"=="%_this%" (
set _last=%_this%
echo %_this%
)
) else (
echo %_this%
set _last=%_this%
)
goto :EOF
Als erster Parameter wird der Dateiname oder ein Muster erwartet (*.log). Ausserdem werden hier Pfade mit Leerzeichen richtig behandelt.
Der Vorschlag mit "dir /s" hat den Nachteil, dass keine Pfade aufgelistet werden.
@edepfau
Abgesehen davon würde ich "Pfad" trotzdem nicht so eng auslegen und daher eher "
... was allerdings beides letztlich nur webtrajo (BTW: Willkommen im Forum!) wirklich wissen kann.
Grüße
bastla
P.S.: "unique" je Verzeichnis sollten Dateien namens "a.txt" eigentlich ohnehin sein ...
Der Vorschlag mit "dir /s" hat den Nachteil, dass keine Pfade aufgelistet werden.
Sollte wirklich "nur Pfade" gemeint gewesen sein, dann wäre natürlich eine Schleife erforderlich - zB in der "/f"-Variante (müsste sich dann auch nur um die tatsächlichen Treffer kümmern) - konkret:for /f "delims=" %%i in ('dir /s /b /a-d "E:\PFAD\a.txt"') do @echo %%~dpi
%%~dpi
" verwenden ...... was allerdings beides letztlich nur webtrajo (BTW: Willkommen im Forum!) wirklich wissen kann.
Grüße
bastla
P.S.: "unique" je Verzeichnis sollten Dateien namens "a.txt" eigentlich ohnehin sein ...
Moin bastla und edepfau,
So schlimm haben es die RedmonderInnen ja auch nicht zusammenphantasiert.
Der oben von bastla angesprochene Effekt tritt natürlich nur auf, wenn man/frau es zulässt - dadurch, dass eine Datei EXAKT gesucht / Wildcards weggelassen werden.
Wird der Dateiname "ichBinNichtDa.bla" um ein Wildcard-Fragezeichen z.B am Ende ergänzt, dann kommt kein vermeintlicher Fehlalarm.
Oder nochmal zur Verdeutlichung:
Grüße
Biber
P.S.
Zitat von @bastla:
@edepfau
Schaut auch lustig aus, wenn Du
draus machst ... 
Zitat von @edepfau:
das scheint eine Eigenart der for-Schleife zu sein..kann aber sehr einfach durch
behoben werden.
Nun macht mal nicht die jungen Nachwuchstalente nervös.@edepfau
Schaut auch lustig aus, wenn Du
for /R E:\PFAD %i in (ichbinnichtda.txt) do @echo %i
>
Zitat von @edepfau:
das scheint eine Eigenart der for-Schleife zu sein..kann aber sehr einfach durch
> for /R E:\PFAD %i in (a.txt) do @if exist %i echo %~pi
>
So schlimm haben es die RedmonderInnen ja auch nicht zusammenphantasiert.
Der oben von bastla angesprochene Effekt tritt natürlich nur auf, wenn man/frau es zulässt - dadurch, dass eine Datei EXAKT gesucht / Wildcards weggelassen werden.
Wird der Dateiname "ichBinNichtDa.bla" um ein Wildcard-Fragezeichen z.B am Ende ergänzt, dann kommt kein vermeintlicher Fehlalarm.
Oder nochmal zur Verdeutlichung:
>for /r "." %i in (bla.blubb) do @echo %i
....
D:\temp\test\texte\bla.blubb
D:\temp\test22\bla.blubb
D:\temp\test222\bla.blubb
D:\temp\testheute\bla.blubb
....
.....{ gibt es natürlich nirgends, aber 57 Unterverzeichnisse werden aufgelistet }
>for /r "." %i in (bla.blubb?) do @echo %i
{ keine einzige Zeile Output .... as should do...}
--
-- Gegenprobe mit EXISTIERENDEN Dateien: mit und ohne Wildcards:
--
>for /r "." %i in (feef.txt) do @echo %i
...{Existiert 1x, aber 57 Verzeichnisse werden angelistet}
>for /r "." %i in (feef.txt?) do @echo %i
D:\temp\test\feef.txt ----> genau eine Fund-Zeile as should do
Grüße
Biber
P.S.
Der Vorschlag mit "dir /s" hat den Nachteil, dass keine Pfade aufgelistet werden.
Dann könnten wir doch "Dir /s /b" nehmen...,-)>for /r "." %i in (bla.blubb?) do @echo %i
krank, aber cool; danke, wieder was gelernt.
Ich werde immer noch nicht glücklich mit "dir /s/b". Anders als der OP suche ich nämlich gleich nach einem wildcard (*.log), nach der Überlegung "kann er wildcard, kann er auch exakte Namen". Dann brauche ich aber ein uniq hinterher, um mehrfache Pfade auszusieben.
Ist doch gelungen, oder? (uniq meine ich)
Gruss,
Ede

Zitat von @edepfau:
Dann brauche ich aber ein uniq hinterher, um mehrfache Pfade auszusieben.
Ist doch gelungen, oder? (uniq meine ich)
Hallo Ede,Dann brauche ich aber ein uniq hinterher, um mehrfache Pfade auszusieben.
Ist doch gelungen, oder? (uniq meine ich)
wenn man mal vom didaktischen Nutzen der Variable "_this" absieht ließe sich das kürzer formulieren:
:COMP
if defined _last if "%_last%"=="%~1%" Goto :eof
echo.%~1
set "_last=%~1"
Gruß
LotPings
Hallo LotPings,
ja, viel klarer jetzt:
In der Zeile 2 war noch ein "%" zuviel. Der Code wird jetzt auch etwas schneller laufen, weil weniger shells gestartet werden müssen.
Falls der OP noch mitliest: im Batchfile weiter oben muss jetzt natürlich CALL :UNIQ stehen.
NB: "echo.%var" und "echo %var" sind äquivalent, oder kenne ich da was noch nicht?
ja, viel klarer jetzt:
:UNIQ
if defined _last if "%_last%"=="%~1" goto :EOF
echo %~1
set "_last=%~1"
goto :EOF
In der Zeile 2 war noch ein "%" zuviel. Der Code wird jetzt auch etwas schneller laufen, weil weniger shells gestartet werden müssen.
Falls der OP noch mitliest: im Batchfile weiter oben muss jetzt natürlich CALL :UNIQ stehen.
NB: "echo.%var" und "echo %var" sind äquivalent, oder kenne ich da was noch nicht?

Zitat von @edepfau:
NB: "echo.%var" und "echo %var" sind äquivalent, oder kenne ich da was noch nicht?
Alte (gute) Gewohnheit, wenn eine Variable keinen Inhalt hat, verhindert der Punkt das Echo den Satus [ON|OFF] zurückgibt.NB: "echo.%var" und "echo %var" sind äquivalent, oder kenne ich da was noch nicht?
Gruß
LotPings
... verhindert der Punkt das Echo den Satus [ON|OFF] zurückgibt.
... es darf aber zB auch ein "\", ein "," oder ein ";", oder wenn Du magst auch ein "+" sein - so, wie eben bei Bedarf auch eine Leerzeile erzeugt werden kann ...---
So schön die "UNIQisierung" inzwischen auch umgesetzt ist
Grüße
bastla

Zitat von @bastla:
... es darf aber zB auch ein "\", ein "," oder ein ";", oder wenn Du magst auch ein "+" sein - so, wie eben bei Bedarf auch eine Leerzeile erzeugt werden kann ...
Wenn schon, denn schon ":" und "/" tun es auch.... es darf aber zB auch ein "\", ein "," oder ein ";", oder wenn Du magst auch ein "+" sein - so, wie eben bei Bedarf auch eine Leerzeile erzeugt werden kann ...
Im Usenet gab es mal eine Untersuchung dazu, welche der Trenner schneller verarbeitet wurden, aber bei der Geschwindigkeit heutiger CPUs ist das marginal.
Gruß
LotPings
[OT] @bastla
Ich nehme doch stark an, dass so ein 64bit-Win7-OktaCore-Bolide auch Dateien in 3 oder 4 Dimensionen stapeln kann, oder?
Sonst hätten wir doch alle immer noch mit Windows XP mailen und Solitaire spielen können...
Grüße
Biber
[/OT]
Zitat von @bastla:
es sei denn, webtrajo hätte tatsächlich mehrere "a.txt" in einem Verzeichnis versammelt
) ...
es sei denn, webtrajo hätte tatsächlich mehrere "a.txt" in einem Verzeichnis versammelt
Ich nehme doch stark an, dass so ein 64bit-Win7-OktaCore-Bolide auch Dateien in 3 oder 4 Dimensionen stapeln kann, oder?
Sonst hätten wir doch alle immer noch mit Windows XP mailen und Solitaire spielen können...
Grüße
Biber
[/OT]