Per Batch Pfad suchen und diesen Übernehmen
Hallo, dies ist dann auch gleich mal meine erste Frage hier im Forum :-P
Ähm, also folgendes möchte ich per Batch realisieren:
Ich möchte per Batch-Datei bestimmte Verzeichnissen auf bestimmten Laufwerken (unterschiedliche Pfade) in einer Text-Datei auflisten
Also:
Laufwerk D:\aaa\bbb\ccc\ddd
Laufwerk E:\aaa\bbb\ccc\ddd\eee
Laufwerk F:\aaa\bbb
Laufwerk G:\aaa\b_b\c_c\d_d\e_e\fff
usw.
--> das ist soweit kein Problem
::Aber::
Problem:
Da die Auflistung öfter aktualsiert wird, weil neue Verzeichnisse hinzukommen oder Alte gelöscht werden, soll das Ganze zukunftssicher sein
- Durch Formatierung und Neuaufsetzen des Systems oder neu Patitionierung oder Verschieben der kompletten Ordnerstrukturen auf andere Partitionen müsste der Pfad zu den Verzeichnissen immer angepasst werden ==> das möchte ich umgehen
Daher habe ich mir überlegt, dass ich im jeweiligen Verzeichnis eine weitere Batch-Datei erstelle, welche den jeweiligen Pfad (%cd%) in eine Datei schreibt (z.B.: C:\Pfad.txt)
Allerdings muss meine Batch-Datei (die alles ausführen soll) als erstes diese (ich glaub die sog. "Kind-Bätche" *grübel*) ausführen, dann die Pfade aus der txt-Datei auslesen und den jeweils richtigen (aktuellen) Pfade übernehmen ==> Und hierbei komme ich nun nicht weiter, weil ich davon eigentlich keine Ahnung habe.
(Gut wäre vielleicht auch wenn ich ein Abfrage einbaue (set /p), so dass dann nicht jedesmal die Pfad-txt-Datei aktualisiert wird, sondern nur bei bedarf)
D.h., dass Auflisten und das erstellen der txt-Datei mit den Pfaden ist sowei kein Problem, nur eben:
1. Das Suchen der ganzen Batch-Dateien mit anschließendem starten dieser damit diese alles in eine txt-Datei schreiben
2. Dann das auslesen der einzelnen Pfade aus der txt-Datei
3. Dann das Übernehmen der richtigen Pfade
4. Und was ich vielleicht jetzt vergessen habe oder ich nicht weiss das ich es vergessen habe
Ansonsten habe aus einen ähnlichen Thread bisher nur folgendes gefunden (wobei ich nicht interpretieren kann, ob es das ist was mir weiterhelfen könnte, da ich mit diesem nicht viel anfgangen kann, sollte das weiterhelfen bin ich über eine erläuterung was dort passiert sehr dankbar!):
@echo off & Setlocal
for /r "c:\" %%i in (beispiel.exe?) do Set "pfad1=%%~dpi"
:: das müsste natürlich angepasst werden
:: Quelle: Mit Batch Datei Pfad suchen, diesen dann weiter verwenden
Wenn mir jemand weiter helfen könnte bin ich sehr dankbar! Ich bin auch für einen einfacheren Weg sehr dankbar!
Bei Lösungsvorschlägen wurde ich mich auch sehr über eine Erläuterung/Erklärung freuen, da ich das Ganze eben auch gern verstehen möchte, weil will ja dazulernen und nicht ständig um Rat fragen müssen
Schon mal Dank im Voraus!
ViRGiL
P.S.: System: Windows XP SP3
Ähm, also folgendes möchte ich per Batch realisieren:
Ich möchte per Batch-Datei bestimmte Verzeichnissen auf bestimmten Laufwerken (unterschiedliche Pfade) in einer Text-Datei auflisten
Also:
Laufwerk D:\aaa\bbb\ccc\ddd
Laufwerk E:\aaa\bbb\ccc\ddd\eee
Laufwerk F:\aaa\bbb
Laufwerk G:\aaa\b_b\c_c\d_d\e_e\fff
usw.
--> das ist soweit kein Problem
::Aber::
Problem:
Da die Auflistung öfter aktualsiert wird, weil neue Verzeichnisse hinzukommen oder Alte gelöscht werden, soll das Ganze zukunftssicher sein
- Durch Formatierung und Neuaufsetzen des Systems oder neu Patitionierung oder Verschieben der kompletten Ordnerstrukturen auf andere Partitionen müsste der Pfad zu den Verzeichnissen immer angepasst werden ==> das möchte ich umgehen
Daher habe ich mir überlegt, dass ich im jeweiligen Verzeichnis eine weitere Batch-Datei erstelle, welche den jeweiligen Pfad (%cd%) in eine Datei schreibt (z.B.: C:\Pfad.txt)
Allerdings muss meine Batch-Datei (die alles ausführen soll) als erstes diese (ich glaub die sog. "Kind-Bätche" *grübel*) ausführen, dann die Pfade aus der txt-Datei auslesen und den jeweils richtigen (aktuellen) Pfade übernehmen ==> Und hierbei komme ich nun nicht weiter, weil ich davon eigentlich keine Ahnung habe.
(Gut wäre vielleicht auch wenn ich ein Abfrage einbaue (set /p), so dass dann nicht jedesmal die Pfad-txt-Datei aktualisiert wird, sondern nur bei bedarf)
D.h., dass Auflisten und das erstellen der txt-Datei mit den Pfaden ist sowei kein Problem, nur eben:
1. Das Suchen der ganzen Batch-Dateien mit anschließendem starten dieser damit diese alles in eine txt-Datei schreiben
2. Dann das auslesen der einzelnen Pfade aus der txt-Datei
3. Dann das Übernehmen der richtigen Pfade
4. Und was ich vielleicht jetzt vergessen habe oder ich nicht weiss das ich es vergessen habe
Ansonsten habe aus einen ähnlichen Thread bisher nur folgendes gefunden (wobei ich nicht interpretieren kann, ob es das ist was mir weiterhelfen könnte, da ich mit diesem nicht viel anfgangen kann, sollte das weiterhelfen bin ich über eine erläuterung was dort passiert sehr dankbar!):
@echo off & Setlocal
for /r "c:\" %%i in (beispiel.exe?) do Set "pfad1=%%~dpi"
:: das müsste natürlich angepasst werden
:: Quelle: Mit Batch Datei Pfad suchen, diesen dann weiter verwenden
Wenn mir jemand weiter helfen könnte bin ich sehr dankbar! Ich bin auch für einen einfacheren Weg sehr dankbar!
Bei Lösungsvorschlägen wurde ich mich auch sehr über eine Erläuterung/Erklärung freuen, da ich das Ganze eben auch gern verstehen möchte, weil will ja dazulernen und nicht ständig um Rat fragen müssen
Schon mal Dank im Voraus!
ViRGiL
P.S.: System: Windows XP SP3
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 108315
Url: https://administrator.de/forum/per-batch-pfad-suchen-und-diesen-uebernehmen-108315.html
Ausgedruckt am: 18.04.2025 um 15:04 Uhr
15 Kommentare
Neuester Kommentar
Hallo ViRGiL und willkommen im Forum!
Soferne ich das richtig verstanden habe, sollen die Pfade bestimmter Verzeichnisse immer aktuell in einer Textdatei aufscheinen.
Dafür sollte es genügen, in den jeweiligen Verzeichnissen zB eine Datei "Pfad.txt" (Inhalt egal) zu hinterlegen und bei Bedarf die Pfade all dieser Dateien zu ermitteln, zB
Zu pflegen wäre dann nur die Liste der Laufwerke (Zeile 4) ...
Grüße
bastla
Soferne ich das richtig verstanden habe, sollen die Pfade bestimmter Verzeichnisse immer aktuell in einer Textdatei aufscheinen.
Dafür sollte es genügen, in den jeweiligen Verzeichnissen zB eine Datei "Pfad.txt" (Inhalt egal) zu hinterlegen und bei Bedarf die Pfade all dieser Dateien zu ermitteln, zB
@echo off & setlocal
set "Liste=D:\Verzeichnisliste.txt"
set "Datei=Pfad.txt"
set "LW=D E F G"
if exist "%Liste%" del "%Liste%"
for %%i in (%LW%) do for /f %%a in ('dir /s /b /a-d "%%i:\%Datei%"') do >>"%Liste%" echo %%~dpa
Grüße
bastla
Moin ViRGiL,
willkommen im Forum.
Ich versuche mal, für @bastla ein paar der Antworten zu geben.
Dazu (wie zu allen verwendeten Teil-Befehlen des Batches) TESTE TESTE TESTE am Cmd-Prompt:
SetLocal erschließt sich Dir über SetLocal /?
Das %%~dpa erfährst Du unter "FOR /?" im letzten Drittel.
Kurzgefasst lässt es sich lesen als
Ist allerdings kein Muss, sondern wird meines Wissens nur hier in diesem Forum kultiviert.
Profi-Scripte aus der Computerbild oder PC-Welt verkaufen sich auch ohne diesen Schnickschnack.
Führt alls in allem nur zu einer kosmetischen Anpassung an @sunblockers Schnipsel in der letzten Zeile.
Zu guter Letzt:
Wenn das der Ursprung aller Deiner Aktivitäten war, dann hilft es nix ..
Dazu, während der obige Schnipsel vor sich hin schrapelt:
Grüße
Biber
willkommen im Forum.
Ich versuche mal, für @bastla ein paar der Antworten zu geben.
aber nicht auf jedem Laufwerk die Datei war, kann man da noch was einbauen falls die datei eben nicht vorhanden ist, das er dies einfach überspringt?)
Ja. Die Fehlermeldung "Datei nicht gefunden" lässt sich ins Nirwana umleiten. D.h. die Fehlermeldung wird zwar nach wie vor geschrieben, aber dorthin, wo auch die Garantie für meine Altersversorge niedergelegt ist.Dazu (wie zu allen verwendeten Teil-Befehlen des Batches) TESTE TESTE TESTE am Cmd-Prompt:
>dir Gibtesnicht.txt /b
Datei nicht gefunden
>dir Gibtesnicht.txt /b 2>nul
-- keine Ausgabe--
Wofür steht bzw. was bedeuten:
setlocal
/a-d
%%~dpa
Beim Testen des DIR-Befehls kannst Du sowohl DIR /? ausprobieren wie auch den Unterschied zwischen "DIR /a:d" und "DIR /a:-d".setlocal
/a-d
%%~dpa
SetLocal erschließt sich Dir über SetLocal /?
Das %%~dpa erfährst Du unter "FOR /?" im letzten Drittel.
Kurzgefasst lässt es sich lesen als
- von der Laufvariablen %%a der FOR-Anweisung will ich nur
- den aus der Variablen (die einen vollständigen Dateinamen enthält)
- abgeleiteten Wert d-wie-Drive und p-wie-path haben".
und warum kommen die Anführungszeichen bei: set und den jeweiligen variablen hinzu
Um zu vermeiden, dass unabsichtlich Leerzeichen am Ende des zugewiesenen Werts mit in den Variableninhalt übernommen werden.Ist allerdings kein Muss, sondern wird meines Wissens nur hier in diesem Forum kultiviert.
Profi-Scripte aus der Computerbild oder PC-Welt verkaufen sich auch ohne diesen Schnickschnack.
Führt alls in allem nur zu einer kosmetischen Anpassung an @sunblockers Schnipsel in der letzten Zeile.
@echo off & setlocal
set "Liste=D:\Verzeichnisliste.txt"
set "Datei=Pfad.txt"
set "LW=D E F G"
if exist "%Liste%" del "%Liste%"
for %%i in (%LW%) do for /f %%a in ('dir /s /b /a-d "%%i:\%Datei%" ^2^>nul') do >>"%Liste%" echo %%~dpa
Zu guter Letzt:
Ich möchte per Batch-Datei bestimmte Verzeichnissen auf bestimmten Laufwerken (unterschiedliche Pfade) in einer Text-Datei auflisten
Wenn das der Ursprung aller Deiner Aktivitäten war, dann hilft es nix ..
- bevor Du ganze Sätze sprichst, musst Du einzelne Worte lernen und verstehen
- bevor Du einzelne CMD-Befehle in einem Batch zusammenkleistern kannst, musst Du die einzelnen Befehle wie Vokabeln lernen und verstehen.
Dazu, während der obige Schnipsel vor sich hin schrapelt:
- noch ein Fenster öffnen mit "Start" -"Ausführen" -cmd
- und in Ruhe nachlesen
Help
dir /?
set /?
for /?
dir /?
set /?
for /?
Grüße
Biber
hei ich will mich nicht gerade festlegen aber das problem hatte ich auch und ich habe nur die gänsefüschen am anfang von echo und am schluss vergessen
das heist
mit dem zeichen echo ohne ( " ) wird nur der echo status abgefragt.
oder bin ich falsch
MFG g4rFi3ld der batch newbie
das heist
"echo" ist nicht gleich echo
oder bin ich falsch
MFG g4rFi3ld der batch newbie
@G4rfi3ld
@ViRGiL
erhältst Du, wenn die auszugebende Variable leer ist - warum sie das ist, lässt sich ohne die "Verzeichnisliste.txt" gesehen zu haben, schwer sagen ...
Grüße
bastla
die gänsefüschen am anfang von echo
sind selten überhaupt und hier schon gar nicht das Thema (da "echo" als Befehl und nicht als Text verwendet wird)...@ViRGiL
Das heisst doch eigentlich nur, dass bereits beim setzen der Variable etwas schief gelaufen ist, oder?
Richtig erkannt - eine AusgabeEcho ist ausgeschalten (OFF)
Grüße
bastla
Hallo ViRGiL!
Die Leerzeilen 3 und 4 könnten natürlich als Erklärung für die beschriebene Ausgabe dienen, allerdings nicht mit dem geposteten Code
da hier die Leerzeilen einfach übersprungen würden - insofern bitte auch den aktuellen Stand des Batches nochmals posten ...
Grüße
bastla
P.S.: Apropos "geposteter Code": Dafür hätten wir (in der "plain"-Variante auch gut, um einen Dateiinhalt oder eine Ausgabe darzustellen) ...
Die Leerzeilen 3 und 4 könnten natürlich als Erklärung für die beschriebene Ausgabe dienen, allerdings nicht mit dem geposteten Code
for /f "Skip=1 delims=;" %%a in (Verzeichnisliste.txt) do set "VerDatum=%%a"
echo %VerDatum%
Grüße
bastla
P.S.: Apropos "geposteter Code": Dafür hätten wir (in der "plain"-Variante auch gut, um einen Dateiinhalt oder eine Ausgabe darzustellen) ...
Hallo ViRGiL!
Sorry - hatte (weil ich "1:" bis "4:" für nur für das Posten hinzugefügte Zeilennummern gehalten hatte) angenommen, die Zeilen 3 und 4 wären ganz leer ...
Wenn diese Nummerierung tatsächlich in der Datei enthalten ist, müsste allerdings %VerDatum% den Inhalt "4:" haben, da bei jedem Schleifendurchlauf der Wert der Variablen überschrieben wird und somit der letzte gelesene Wert nach der Schleife in %VerDatum% steht ...
Seltsam ist, dass, da ja die "echo"-Zeile erst nach der Schleife folgt, eigentlich nur eine Zeile ausgegeben werden dürfte - eben mit dem Inhalt "4:"
Ändere zum Testen das "echo off" am Anfang in ein "echo on" - damit wird dann jeder Befehl vor der Ausführung angezeigt und es sollte sich so leichter erkennen lassen, wo es noch knirscht ...
Noch etwas: Es könnte sein, dass eine falsche "Verzeichnisliste.txt" verwendet wird, da Du zwar einen Pfad in %Liste% festlegst, diesen jedoch dann nicht verwendest - die entsprechende Zeile (und für das Posten von Batches solltest Du nur < code>, ohne "plain" verwenden, da durch die dann angezeigten Zeilennummern leichter auf eine bestimmte Zeile verwiesen werden kann) sollte eher so aussehen:
Das "usebackq" erlaubt es, um den in %Liste% enthaltenen Dateipfad herum Anführungszeichen zu setzen (falls dieser einmal Leerzeichen enthalten sollte) - anderenfalls würde "for /f" den Pfad als zu zerlegenden Text und nicht als Verweis auf eine Datei interpretieren.
Grüße
bastla
[Edit] Hatte Deine Ergänzung vorhin noch nicht gesehen - wenn Du nur die Zeile 2 auslesen willst, dann so:
Nur bei der Zeile 2 (Zeile 1 wird ja übersprungen) - falls diese ein Datum enthält - ist die Variable %VerDatum% noch nicht gesetzt und bekommt daher einen Wert zugewiesen - für alle folgenden Zeile ist diese Bedingung dann nicht erfüllt und der Wert in %VerDatum% wird daher nicht mehr verändert.
[/Edit]
Sorry - hatte (weil ich "1:" bis "4:" für nur für das Posten hinzugefügte Zeilennummern gehalten hatte) angenommen, die Zeilen 3 und 4 wären ganz leer ...
Wenn diese Nummerierung tatsächlich in der Datei enthalten ist, müsste allerdings %VerDatum% den Inhalt "4:" haben, da bei jedem Schleifendurchlauf der Wert der Variablen überschrieben wird und somit der letzte gelesene Wert nach der Schleife in %VerDatum% steht ...
Seltsam ist, dass, da ja die "echo"-Zeile erst nach der Schleife folgt, eigentlich nur eine Zeile ausgegeben werden dürfte - eben mit dem Inhalt "4:"
Ändere zum Testen das "echo off" am Anfang in ein "echo on" - damit wird dann jeder Befehl vor der Ausführung angezeigt und es sollte sich so leichter erkennen lassen, wo es noch knirscht ...
Noch etwas: Es könnte sein, dass eine falsche "Verzeichnisliste.txt" verwendet wird, da Du zwar einen Pfad in %Liste% festlegst, diesen jedoch dann nicht verwendest - die entsprechende Zeile (und für das Posten von Batches solltest Du nur < code>, ohne "plain" verwenden, da durch die dann angezeigten Zeilennummern leichter auf eine bestimmte Zeile verwiesen werden kann) sollte eher so aussehen:
for /f "usebackq Skip=1 delims=;" %%a in ("%Liste%") do set "VerDatum=%%a"
Grüße
bastla
[Edit] Hatte Deine Ergänzung vorhin noch nicht gesehen - wenn Du nur die Zeile 2 auslesen willst, dann so:
set VerDatum=
for /f "usebackq Skip=1 delims=;" %%a in ("%Liste%") do if not defined VerDatum set "VerDatum=%%a"
[/Edit]