# Batch zum Auslesen von Verzeichnisinhalten



## sarajane (30. Januar 2008)

Hallo!
Suche jetzt schon eine Weile nach ner Lösung, aber bevor ich ganz aufgebe dachte ich ich frage hier mal nach.
Ich brauche eine Textdatei in folgendem Format:

[Verzeichnispfad]
Dateiname.c
Dateiname.h

usw... 

Das Heisst ich möchte von einem Verzeichnis aus alle Unterverzeichnisse und deren Unterverzeichnisse durchlaufen. Von jedem Verzeichnis jeweils den Pfad in eckigen Klammern in eine Textdatei schreiben und darunter alle vorhandenen c und h Dateien (am liebsten mit Angabe von Bedingungen, ob zugehörige .i Dateien existieren)

Ist das mit einer Batch Datei überhaupt möglich? Wenn ja wäre ich über Hinweise wirklich dankbar.
Vielen Dank schonmal im voraus.


----------



## olqs (30. Januar 2008)

Ja sicher geht sowas.
Mal ein kleines Beispiel, dass natürlich noch ein bisschen erweitert gehört.

```
@echo off
del %1
for /F "tokens=*" %%i in ('dir /s /B /AD %2') do (
  echo [%%i]
  dir /B %%i 2>NUL
) >> %1
```
Den Code hier in eine .bat oder .cmd Datei speichern

Das Skript hat 2 Aufrufparameter:
%1 ist die Datei in der das Listing ausgegeben wird
%2 ist der Pfad der gelistet werden soll

Zum Erweitern würd ich dir empfehlen die Hilfeseiten von for,if und set zu lesen. Aufrufbar sind die z.B. mit "help for". Desweiteren ist findstr immer praktisch, wenn man Text filtern will.


----------



## chrysler (12. Februar 2008)

@olqs:
Warum setzt du das i in eckige Klammern und nicht in runde Klammern?
  echo [%%i]

Was bedeutet diese Zeile? Was wird da in die NUL geschrieben?
  dir /B %%i 2>NUL


----------



## olqs (13. Februar 2008)

Ok das %%i steht in den eckigen Klammern, weil eine Ausgabe von [Verzeichnispfad] im Logfile gewünscht ist.

Das 2>NUL heisst, dass die Fehlermeldungen, falls welche beim 'dir' ausgegeben werden aufs NUL Device, also ins Nirvana, umgeleitet werden.


----------



## chrysler (13. Februar 2008)

Ach so, danke.
Was ist in dem Quellcode %2 und normal 2?
Gibt es eine Übersicht darüber, wie Fehlermeldungen oder Sonstiges bei der batch-Verarbeitung abgefragt werden können, sodass man weiss, dass an der Stelle in dem Quellcode die 2 für einen (bestimmten/allgemeinen) Fehler steht?


----------



## olqs (13. Februar 2008)

%2 ist der zweite Argument das dem Skript auf des Befehlszeile übergeben wurde.
Analog dazu %1, %3, ...

Die 2 steht immer für den Errorkanal, die 1 für die Standardausgabe eines Programms.
Die 1 wird aber meistens weggelassen.

Infos darüber findest du im Internet wenn du nach STDOUT und STDERR suchst.
Oftmals wirst du da was über Linux Programme finden, aber die Infos dafür gelten auch für Shell Komanndos unter Windows. Die Ein- und Ausgabekanäle werden hier gleich angesprochen.


----------



## chrysler (25. Februar 2008)

Ah, danke.
Ich habe nach STDOUT gesucht und bin bei http://wwwcip.informatik.uni-erlangen.de/old/tree/CIP/Manuals/unix/shell/kanaele.html
gelandet. Das interessiert mich schon. Ich habe dazu noch Fragen, aber die würden den Rahmen dieses Threads wohl sprengen, und das gehört nicht zur Ausgangsfrage. Würdest du mir per PM Fragen dazu beantworten?


----------



## olqs (25. Februar 2008)

Sicher kannst du mir auch per PN ein paar Fragen stellen.

Wenn du aber meinst, dass es auch noch andere interessieren könnte, dann mach nen neuen Thread auf.


----------

