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

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

Printed on: April 19, 2024 at 23:04 o'clock

Member: Biber
Biber Sep 14, 2005 at 13:46:20 (UTC)
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
Member: JK87
JK87 Sep 14, 2005 at 15:39:52 (UTC)
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%
Member: Biber
Biber Sep 14, 2005 at 16:27:00 (UTC)
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
Member: JK87
JK87 Sep 14, 2005 at 18:25:17 (UTC)
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.
Member: Biber
Biber Sep 14, 2005 at 19:02:48 (UTC)
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
Member: JK87
JK87 Sep 15, 2005 at 07:42:03 (UTC)
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
Member: Biber
Biber Sep 15, 2005 at 08:05:58 (UTC)
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