# Probleme mit Batch-Datei...



## orffyre (10. Mai 2007)

Hallo werte Forums-Gemeinschaft!

Ich habe folgendes Problem:

Meine zwei Batch-Dateien rufen immer ganze Verzeichnisse auf.

Ich würde gerne eine Batch-Datei schreiben, die folgendes machen kann:

- ich will wissen, was in bestimmten Verzeichnissen ist und dann das in Datei ausgeben oder eben eine Kopie in die Datei schreiben
- die Namen der Dateien möchte ich gerne anzeigen lassen, aber alles andere nicht (also kein "." und auch kein ".." usw.)
- Unterverzeichnisse dürfen nicht durchsucht werden
- eventuell, aber nicht zwingend, noch einen eigenen Verzeichnisbaum

Da ich absolut keine Ahnung mit der Batch-Programmierung habe (nur das ganze grundlegende Zeug, das man in ein/zwei Stunden in der Berufsschule lernt), würde es mich freuen, wenn mir jemand die Befehle parat hätte.

Für jede Hilfe bin ich Euch schonmal im Vorraus dankbar!

Viele Grüsse,
orffyre


----------



## AIKler (10. Mai 2007)

Hi

hab ich des Richtig verstanden:
Du willst eine Batch, die den Inhalt eines Verzeichnisses in eine Datei reinschreibt. Jedoch des . und .. und die abschlussinfos weglässt

Probier mal:

```
dir /B >dateiname.txt
```




ansonsten hier die dir /?:

```
DIR [Laufwerk:][Pfad][Dateiname] [/A[[:]Attribute]] [ /B ] [ /C] [/D] [/L] [/N]
  [/O[[:]Folge]] [/P] [/Q] [ /S] [/T[[:]Zeit]] [/W] [/X] [/4]

  [Laufwerk:][Pfad][Dateiname]
             Bezeichnet Laufwerk, Verzeichnis und/oder Dateien.

  /A         Listet Dateien mit angegebenen Attributen auf.
  Attribute   D Verzeichnisse        R Schreibgeschützte Dateien
              H Versteckte Dateien   A Zu archivierende Dateien
              S Systemdateien        - vorangestellt kehrt die Bedeutung um
  /B         Einfaches Format (keine Kopfdaten, keine Zusammenfassung).
  /C         Zeigt das Tausendertrennzeichen bei Dateigrößen an (Standard-
             einstellung). Verwenden Sie /-C, um das Tausendertrennzeichen
             nicht anzuzeigen.
  /D         Gleich wie Breitformat, jedoch nach Spalten sortiert.
  /L         Verwendet Kleinschreibung.
  /N         Neues, langes Listenformat (Dateinamen auf der rechten Seite).
  /O         Gibt die Liste sortiert aus.
  Folge       N Name (alphabetisch)           S Größe (kleinere zuerst)
              E Erweiterung (alphabetisch)    D Datum/Zeit (ältere zuerst)
              G Verzeichnisse zuerst          - vorangestellt kehrt die
                                                Reihenfolge um
  /P         Pausiert nach jeder vollen Bildschirmseite.
  /Q         Gibt den Besitzer der Datei aus.
  /S         Listet Dateien und alle Unterverzeichnisse auf.
  /T         Bestimmt welche Zeit verwendet wird (nur für NTFS).
  Zeit        C  Erstellung
              A  Letzter Zugriff
              W  Letzter Schreibzugriff
  /W         Verwendet Breitformat für die Auflistung.
  /X         Zeigt die Kurznamen für Dateien mit Nicht-8Punkt3-Namen an.
             Das Format ist das gleiche wie bei /N, wobei der Kurzname vor
             dem Langnamen eingefügt wird. Wenn kein Kurzname vorhanden ist,
             werden Leerzeichen angezeigt.
  /4         Zeigt das Jahr vierstellig an.
```

Optionen können in der Umgebungsvariablen DIRCMD voreingestellt werden.
"-" vor einer Option setzt die Voreinstellung außer Kraft, z.B. DIR /-W.

Kannst damit was anfangen


----------



## orffyre (10. Mai 2007)

@aikler: Erstmal danke für die schnelle Antwort!

Ja, so in etwa.

Jetzt gibt er mir natürlich auch die Unterverzeichnisse aus, das soll er aber nicht machen.

Ich glaube das mit den Dateien ist so okay.

Also nur noch die Unterverzeichnisse weglassen.

Gibt es eventuell auch die Möglichkeit die Endungen der Dateien wegzulassen? Dass also nur der Name der Datei da steht.

Und das mit dem Verzeichnisbaum? Kann ich mir jetzt nicht vorstellen, wie das gehen soll...

Aber danke schonmal bis hierhin!

Viele Grüsse,
orffyre


----------



## Andreas Gaisbauer (11. Mai 2007)

Nur die Dateien bekommst du mit

```
dir /b /a-d > log.txt
```

Was möchtest du genau mit dem Verzeichnisbaum?


> /S Listet Dateien und alle Unterverzeichnisse auf.


So?

```
dir /b /a-d /s > log.txt
```

Damit du nur die Dateinamen ohne Extension bekommst, musst du etwas tricksen...
Auf der Kommandozeile:

```
FOR /F %A IN ('DIR /B /A-D') DO @ECHO %~nA >> log.txt
```

In einer Batch Datei

```
FOR /F %%A IN ('DIR /B /A-D') DO @ECHO %%~nA >> log.txt
```

Arbeitet leider nicht immer 100%ig - bei mir werden zum Beispiel die .php erweiterungen nicht enfernt... Weiß auch nicht genau wieso.


----------



## orffyre (11. Mai 2007)

@andreas: Vielen Dank!

Also scheinbar tut es die Datei, aber ich habe mir was überlegt...

Meine Batch-Datei gibt mir nur Verzeichnisse aus. Da das zu einer Art Testumgebung gehört, würde ich gerne auch die Dateien in den Verzeichnissen aufrufen. Derzeit läuft das so:

set BASE=com.irgendwas.%1

Die Dateien möchte ich zusätzlich aufrufen also etwa:

set BASE=com.irgendwas.%1.%2

Als Ausgabe hätte ich gerne, dass er mir sagt:

Verzeichnis (Leerzeichen) Datei.

Ich habe keinen Schimmer, wie ich das machen soll.

V.a. soll das Verzeichnis auch noch als Variable irgendwie festgesetzt werden, also nicht, dass er mir das nur ausgibt, wenn ich es selber eingebe.

Naja, alles ein wenig verzwickt. Ich peil glaub selber nicht mehr, um was es eigentlich geht. Ist ne Aufgabe. Aber ich bin ein Batch-, das wird glaube ich nix mehr.

Trotzdem wirklich: Vielen Dank für Eure Mühe!

Vielleicht hat ja noch jemand ne Idee.

mfg
orffyre


----------



## Andreas Gaisbauer (11. Mai 2007)

Kann ich dir leider nicht helfen. Ich würde das nicht mit Batch machen. Kannst du auf irgendweine Skriptsprache zurückgreifen? Mit PHP oder Perl wäre es eine Sache auf 5 Minuten...


----------



## orffyre (11. Mai 2007)

@andreas: dummerweise nicht. Das soll wohl in einer Batch realisiert werden.

Bad luck. 

Gibt es irgendwie eine Möglichkeit bei


dir d:\beispiel /b /a-d > ausgabe.txt

mir ausgeben zu lassen, welches Verzeichnis durchsucht wurde und das dann mit einem Leerzeichen von den darin enthaltenen Dateien zu trennen?

Also so wie oben ist die Ausgabe folgende:

filename.exe

Ich hätte aber gerne:

beispiel[Lerrzeichen]filename.exe?

Geht das auch über den "dir"-Befehl?

mfg
orffyre


----------



## Andreas Gaisbauer (12. Mai 2007)

Über DIR alleine wird das nicht gehen. Versuche mal mit einer FOR schleife durchzulaufen und alles zu splitten (delims) - dann kannst dü die einzelnen Tokens via echo wieder ausgeben. Das wird aber sehr schwer wenn die Verzeichnistiefe variabel ist.

Infos zu for: for /? da wird alles erklärt...


----------



## AIKler (12. Mai 2007)

Nochmal hi leute

ich hab da mal n bissl rumprobiert;

Unter anderen Systemen gigt es den befehl pwd (print working directory) der dir denaktuellen Pfad auflistet.

Unter Dos ist wieder alles anders; dort heißt dieser  
	
	
	



```
chdir
```

Leider schaff ich es nicht diesen in die FOR-Schleife mit einzubauen. Vll schafft des ja jemand von euch.

Das ergebnis würde mich auch interessieren

Christoph
w.w.c.martini@freenet.de


----------



## Biber2 (22. Mai 2007)

Moin AlKler,
> Ich hätte aber gerne:
> beispiel[Lerrzeichen]filename.exe?
Das sollte so gehen:
...am CMD-Prompt:

```
for %i in (*.*) do @echo %~pi %~nxi
```

In Batch ShowDir.bat (mit Parameter "Verzeichnisname")

```
::----------snipp ShowDir.bat ----
@for %%i in (%1\*.*) do @echo %%~pi %%~nxi
```

Aufruf z.B. mit "ShowDir c:\Beispiele"

Gruß
Biber2


----------



## AIKler (23. Mai 2007)

Super

damit wäre des auch gelöst!!


nur den Lw-Buchstaben druckt er nicht



is aber egal


----------

