Probleme mit Batch-Datei...

orffyre

Erfahrenes Mitglied
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
 
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:
Code:
dir /B >dateiname.txt




ansonsten hier die dir /?:
Code:
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
 
Zuletzt bearbeitet:
@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
 
Nur die Dateien bekommst du mit
Code:
dir /b /a-d > log.txt

Was möchtest du genau mit dem Verzeichnisbaum?
/S Listet Dateien und alle Unterverzeichnisse auf.
So?
Code:
dir /b /a-d /s > log.txt

Damit du nur die Dateinamen ohne Extension bekommst, musst du etwas tricksen...
Auf der Kommandozeile:
Code:
FOR /F %A IN ('DIR /B /A-D') DO @ECHO %~nA >> log.txt

In einer Batch Datei
Code:
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.
 
@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
 
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...
 
@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
 
Zuletzt bearbeitet:
Ü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...
 
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
Code:
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
 
Moin AlKler,
> Ich hätte aber gerne:
> beispiel[Lerrzeichen]filename.exe?
Das sollte so gehen:
...am CMD-Prompt:
Code:
for %i in (*.*) do @echo %~pi %~nxi

In Batch ShowDir.bat (mit Parameter "Verzeichnisname")
Code:
::----------snipp ShowDir.bat ----
@for %%i in (%1\*.*) do @echo %%~pi %%~nxi

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

Gruß
Biber2
 
Zurück