jk87
Goto Top

Mit Batch untergeordneten Ordner suchen

Hey,

habe folgendes Problem:

Ich möchte in einem bestimmten Ordner nach einen Unterordner suchen, welcher sich namentlich ständig ändert!
ODER
In einem Ordner alle untergeordneten Ordner nach Datei test.txt durchsuchen und Pfad als Variable speichern!

Danke für alle Hilfen

JK

Content-ID: 16055

Url: https://administrator.de/forum/mit-batch-untergeordneten-ordner-suchen-16055.html

Ausgedruckt am: 26.12.2024 um 14:12 Uhr

Biber
Biber 14.09.2005 um 15:46:20 Uhr
Goto Top
Moin, JK87,

entweder mit "FOR /R... IN .. DO":
::-------snipp FindDirContainingTestTxt.bat-------------------------------------
@for /R <i>x:\parentDir</i> %%i in (tes?.txt) do Set FoundDir=%%~dpi
::-------snapp FindDirContainingTestTxt.bat------------------------------------

oder mit "FOR /F" und "attrib " oder "Dir /s":
::-------snipp OtherFindDirContainingTestTxt.bat---------------------------------
@for /F "tokens=1-2" %%i in ('attrib /s <i>x:\Parentdir</i>\test.txt') do set FoundDir=%%~dpj  
::-------snapp OtherFindDirContainingTestTxt.bat-------------------------------------------

für X: und ParentDir muss Du natürlich Deine Werte einsetzen.

..auch -zig andere Oneliner-Variationen sind möglich .. schau mal bei "Help FOR".

Frank / der Biber aus Bremen
JK87
JK87 14.09.2005 um 17:39:52 Uhr
Goto Top
Wie kann ich das mir folgenden verknüpfen?
%%~dpi = soll der gefunden Ordner sein

set prefs="%%~dpi\prefs.js"
echo user_pref("network.proxy.type", 1); >>%prefs%
Biber
Biber 14.09.2005 um 18:27:00 Uhr
Goto Top
Wie kann ich das mir folgenden verknüpfen?
%%~dpi = soll der gefunden Ordner sein
Hm, könnten wir auch machen- ich hab den aber lieber %FoundDir% genannt, damit ich ihn wiederfinde..

set prefs="%%~dpi\prefs.js"
Wenn es machbar ist, dann schreib doch hier: set prefs="%FoundDir%\prefs.js"
Wenn Du die Variable aber nur an dieser einzigen Stelle brauchst, dann kannst du auch gleich in der "DO"-Anweisung oben schreiben:
....DO Set prefs="%%~dpi\prefs.js" ...bzw. ....DO Set prefs="%%~dpj\prefs.js"

echo user_pref("network.proxy.type", 1); >>%prefs%
Bist Du sicher mit dem ">>" (Anhängen)? Steht da schon mehr drin? Oder ist nicht ein ">" (Neu anlegen) sinnvoller?
Ich würde sonst zumindest schon vorhandene "user_pref"-Zeilen rausfiltern, falls die prefs.js schon vorhanden ist.
Aber das war ja auch gar nicht Deine Frage, geht mich auch nichts an.
Liebe Grüße
Biber
JK87
JK87 14.09.2005 um 20:25:17 Uhr
Goto Top
Dank, Danke, Danke funktioniert genau so wie ich mir das vorgstellt habe!

%%~dpi war nur ein Beispiel, hab es nun eh so gemacht wie du

JK

PS: Nur aus wissensdrang, wofür steht das "tes?.txt"? Darf man ja nicht ändern sonst funkts nicht.
Biber
Biber 14.09.2005 um 21:02:48 Uhr
Goto Top
Freut mich, dass es klappt, JK87...
das mit den erforderlichen Wildcards in dem "FOR /R"-Befehl ist auch so eine Geschichte, bei der die Sichtweisen von M$ und mir auseinandergehen: M$ hält es für ein Feature, ich eher für einen Bug.

Fakt ist, bei dem "FOR /R"-Befehl, der wirklich SAUSCHNELL ist und den ich gerne nutze, darf man/frau keine vollständigen Dateinamen angeben. Es muss ein "*" oder ein "?" im Dateinamen enthalten sein.

Auf Deutsch: (Beispiel vom CMD-Prompt aus)
for /R c:\ %i in (test.txt) do @echo %~i 
ergibt
c:\test.txt
c:\CA_LIC\test.txt
c:\Config.Msi\test.txt
c:\DB2LOG\test.txt
c:\Dokumente und Einstellungen\test.txt
c:\Dokumente und Einstellungen\Administrator\test.txt
c:\Dokumente und Einstellungen\Administrator\Anwendungsdaten\test.txt .....
...also "findet" in jedem gottverdammten Verzeichnis eine Datei test.txt.

Ist nicht das, was ich von ihm wollte. Mit einem Buchstaben durch "?" ersetzt funktionierts,
for /R c:\ %i in (te?t.txt) do @echo %~i 
da "findet" er nur die "test.txt" dort, wo sie vorhanden ist.

Okay, okay... kann natürlich sein, dass er (wenn es das Schicksal will) statt dessen eher eine "teat.txt" oder "telt.txt" findet, wenn ich nach "te?t.txt" suche.... aber mit Risiken muss man leben. Ich unterstelle mal, Du suchst ja auch nach einer Datei mit toitoitoi seltenerem Namen und setzt das "?" richtig.

Ich habe jedenfalls für dies und jenes einen Batch namens ForAllFiles.bat, den ich immer aufrufe, wenn ich irgendetwas mit ALLEN gleichnamigen Dateien auf meinen Laufwrken tun will ( z.B. für alle comctl32.ocx die Versionsnummer anzeigen oder alle Dateien "Read.me" umbenennen in "VerzeichnisnameReadme.txt oder was auch immer so anfällt. Und dieser ForAllFiles.bat besteht natürlich auch nur aus einem aufgebohrten "FOR /R" -Konstrukt... in dem ich auch nach Dateien "comctl3?.ocx" und "Read.?e" suchen muss.
Lässt sich nach dieser Erläuterung auch von jedem Newbie in zweieinhalb Minuten nachbilden.

Schönen Abend Dir
Biber
JK87
JK87 15.09.2005 um 09:42:03 Uhr
Goto Top
Hab es mit "..\..\prefs.js" bis jetzt gelöst.

Aber danke für den Tipp mach es jetzt so wie du (pre?s.js), den das es diese seltene Datei nochmals gibt ist unwahrscheinlich.

Danke für alles

JK
Biber
Biber 15.09.2005 um 10:05:58 Uhr
Goto Top
Moin, JK87,

wenn Dir das zu unsicher ist, nimm den normalen "DIR"-Befehl:
for /f "delims=" %%i in ('dir /s /b x:\parentDir\prefs.js') do Set  prefs="%%~dpi\prefs.js"  

("delims=" nur, falls Leerzeichen in den Pfadangaben sein können. )

Aber der "FOR /R " ist wirklich schneller.

LG Biber