# [Batch] Verzeichnisnamen auslesen und übergeben



## Salvation (24. Mai 2011)

Hi,

ich hab mich schon ein wenig im Forum umgesehen, jedoch bin ich bisher nicht auf eine Lösung gekommen.

Mein Problem:
Ich soll eine Batch-Datei erstellen, welche die Verzeichnisnamen in einem Verzeichnis ausliest und diese dann ggf. an eine weitere Batch-Datei übergibt, welche dann dafür sorgt, dass bestimmte Daten in diesem Verzeichnissen gelöscht werden. Soll zur Reinigung der Temp-Dateien dienen.

Nun hab ich jedoch bisher nur Beispiele gefunden, welche Dateien und nicht Verzeichnisse auslesen. Jdeoch brauch ich lediglich dich Verzeichnisnamen, welche übergeben werden sollen.

Da ich leider nicht wirklich viel Ahnung mit Batch-Programmen habe, komme ich da nicht wirklich weiter.

Bisher schaut mein Versuch so aus:


```
@echo off

for /f %i in ('dir K:\Profile /a-d /b /o-d')

echo %laufwerk% >> K:\Profile\log.txt
```

Ich möchte damit noch gar nicht die zweite Batch, welche schon existieret, da schon mal jemand die geschrieben hat, um schnell mal die Temp-Dateien zu löschen, jedoch ist diese so geschrieben, dass sie immer angepasst werden muss. Dies soll jedoch wegfallen, damit man, wenn Verzeichnisse hinzugefügt werden, diese von der zweiten (reinigenden) Batch beachtet werden, ohne das da was umgeschrieben werden muss.

Mein kleines Programm soll erstmal nur die Verzeichnisnamen in einer Text-Datei speichern, damit ich scuh schauen kann, ob die Namen auch alle übergeben wurden. Die Text-Datei fällt dann anschliessend weg und via Call (ich glaube so war das), soll dann die zweite Batch-Datei aufgerufen werden, wohin dann die Verzeichnisnamen übergeben und abgearbeitet werden.

Ich hoffe dass mir da jemand ein wenig bei weiter helfen kann.
Vielen Dank schonmal

Salvation


----------



## deepthroat (24. Mai 2011)

Hi.

Du solltest dir mal anschauen was die Optionen des dir Befehls machen, die du da angegeben hast.

Und lies dir mal "help for" durch.

Gruß


----------



## Salvation (24. Mai 2011)

Hi,

angeschaut und umgebaut. Code schaut nun so aus.


```
@echo off

dir K:\Profile /A:D /B >> K:\Profile\dir.log

for /D %I IN (dir.log) DO del Test
```

Ich kann mit dem Dir-Befehl nun die Verzeichnisenamen an die 'dir.log' übergeben. Soweit passt es. Nun wollt sich jedoch so lassen, dass gleich in der Datei auch die For-Anweisung ausgeführt wird.

Dazu muss auf die 'dir.log' zugegriffen werden. Ich bin nun soweit, dass der Coed so steht und zumindest bis :


```
for /D %I
```

läuft. Jedoch ist das %I wohl falsch. Bekomme diese Meldung: "I" ist syntaktisch an dieser Selle nicht verarbeitbar.

Salvation



EDIT:

Ich habs nun soweit, dass er die Daten anhängt. Sprich die 'dir.log' ausliest und mit übergibt. Jedoch kommt nun die meldung, dass er die Datei nicht gefunden werden konnte.


```
@echo off

dir K:\Profile /A:D /B >> K:\Profile\dir.log

for /f %%f in (dir.log) DO DEL /F /S /Q /A:H "Test" %%f\Test
```


Aufbau der Verzeichnise:
Profile
- Test1
-- Test
-Test 2
-- Test
- Test3
- Test4
...

Die Test soll gelöscht werden.


----------



## deepthroat (24. Mai 2011)

Salvation hat gesagt.:


> angeschaut und umgebaut. Code schaut nun so aus.
> 
> 
> ```
> ...


Wozu soll der Doppelpunkt bei /A:D gut sein? Hab ich noch nie gesehen. (scheint allerdings auch keine Wirkung zu haben).

Warum verwendest du nicht einfach eine FOR /F Schleife statt eine temp. Datei anzulegen?


Salvation hat gesagt.:


> Jedoch ist das %I wohl falsch. Bekomme diese Meldung: "I" ist syntaktisch an dieser Selle nicht verarbeitbar.


Wie auch in "help for" steht, muss man %%variable (2 Prozentzeichen) in einem Batch Programm schreiben wenn man den FOR Befehl verwenden will.

Gruß


----------



## Salvation (24. Mai 2011)

Hi,

ich hab wohl im selben Moment editiert, wie du geantwortet hast. Ich habe die letzte Zeile schon ein wenig mehr angepasst, soweit kam ich eben selbst dahinter. Der Kopf ist so geblieben. Diesen hab ich im Internet gefunden und nur an meine Daten angepasst. Daher auch das A. Ich habs drin gelassen, da ich selbst, dass muss ich gestehen, nicht weiss, wofür es ist.

Es soll in eine gesonderte Datei laufen, damit diese gelegendlich geprüft werden kann. Jedoch hab ich selbst gemerkt, dass die Daten immer wieder angehängt werden, was nicht redundant ist.

Die For-Schleife schaut nun so aus:


```
for /f %%f in (dir.log) DO DEL /F /S /Q /A:H %%f\Test
```

Wie oben schon gesagt, funktioniert es in soweit, dass er sie anspricht, aber den Test-Ordner (ist in Test1 und Test2) nicht findet. Zudem läuft das Programm scheinbar sechs mal durch.


----------



## deepthroat (24. Mai 2011)

Salvation hat gesagt.:


> ich hab wohl im selben Moment editiert, wie du geantwortet hast. Ich habe die letzte Zeile schon ein wenig mehr angepasst, soweit kam ich eben selbst dahinter. Der Kopf ist so geblieben. Diesen hab ich im Internet gefunden und nur an meine Daten angepasst. Daher auch das A. Ich habs drin gelassen, da ich selbst, dass muss ich gestehen, nicht weiss, wofür es ist.
> 
> Es soll in eine gesonderte Datei laufen, damit diese gelegendlich geprüft werden kann. Jedoch hab ich selbst gemerkt, dass die Daten immer wieder angehängt werden, was nicht redundant ist.


Siehe z.B. http://www.adminbox.de/2010/batch-kurs-teil-3-hier-gehts-lang-umleitungen/


Salvation hat gesagt.:


> Die For-Schleife schaut nun so aus:
> 
> 
> ```
> ...


Vermutlich mußt du erstmal das Verzeichnis wechseln. (pushd)


Salvation hat gesagt.:


> Zudem läuft das Programm scheinbar sechs mal durch.


Wie kommst du darauf?

Gruß


----------



## Salvation (24. Mai 2011)

deepthroat hat gesagt.:


> Siehe z.B. http://www.adminbox.de/2010/batch-kurs-teil-3-hier-gehts-lang-umleitungen/


Was ein son kleines '>' Ding schon macht. Habs ausgebessert



deepthroat hat gesagt.:


> Vermutlich mußt du erstmal das Verzeichnis wechseln. (pushd)


Okay, hier stoß ich grade ein wenig an meine Grenzen, aber ich lese mich da mal durch.




deepthroat hat gesagt.:


> Wie kommst du darauf?


Nachgezählt, aber ich verbesser mich. Erläuft sie so oft durch, wie die Daten in der Log gespeichert wurden. Dank deinem Link wurde das nun behoben.


LG Salvation

Gruß


----------



## Salvation (24. Mai 2011)

Hi,

kann es sein, dass man darüber nur Dateien und keine Verzeichnisse löschen kann, denn das hab ich nun schon hinbekommen. Was jedoch ein wenig nervig ist, ist die Anfrage, ob man es den wirklich löschen will.

Was das pushd angeht, komme ich damit gar nicht weiter. Zumindest die Versuche verlaufen sich irgendwie.

Salvation


----------



## deepthroat (24. Mai 2011)

Salvation hat gesagt.:


> kann es sein, dass man darüber nur Dateien und keine Verzeichnisse löschen kann, denn das hab ich nun schon hinbekommen. Was jedoch ein wenig nervig ist, ist die Anfrage, ob man es den wirklich löschen will.


Versuch mal rmdir.


Salvation hat gesagt.:


> Was das pushd angeht, komme ich damit gar nicht weiter. Zumindest die Versuche verlaufen sich irgendwie.


Deine ganzen Aktionen spielen sich doch direkt unterhalb von K:\Profile ab, oder?! Dann mußt du doch nur am Anfang vom Skript in dieses Verzeichnis wechseln, sonst werden die Verzeichnisse, die in der log.txt drin stehen ja nicht gefunden. Das war doch das Problem, oder?

```
pushd k:\profile || exit /b 1

dir /AD /B > dir.log
for /f %%f in (dir.log) DO rmdir /S /Q %%f\Test
```
Gruß


----------



## Salvation (24. Mai 2011)

Hi,

passt. Funktioniert.
Vielen lieben Dank.

Salvation


----------

