soidberg
Goto Top

txt mit Pfaden auslesen, Unterordner erkennen und in .txt sichern

Hallo liebe User, liebes Team,

ich habe hier eine .txt Datei mit folgenden Aufbau:

~~~
C:\Fotos2006
F:\Fotos2007 Januar
~~~

Primäre Aufgabe / Ziel:
Ich benötige eine .bat die diese .txt ausliest und mir von den darin enthaltenen Pfaden ausgehend, alle Unterordner erkennt und mir eine komplette Liste in .txt speichert.

In diesem Fall würde das Ergebnis so aussehen:

C:\Fotos2006
C:\Fotos2006\Januar
C:\Fotos2006\Februar

F:\Fotos2007 Januar
F:\Fotos2007 Januar\Hildesheim
F:\Fotos2007 Januar\Hannover


Liebe Grüße Soidberg

Content-Key: 58350

Url: https://administrator.de/contentid/58350

Printed on: April 26, 2024 at 08:04 o'clock

Member: bastla
bastla May 05, 2007 at 17:45:54 (UTC)
Goto Top
Hallo Soidberg!

Sollte etwa so gehen:
@echo off & setlocal
set "Quelldatei=D:\Ordnerliste.txt"  
set "Zieldatei=D:\AlleOrdner.txt"  
if exist "%Zieldatei%" del "%Zieldatei%"  
for /f "usebackq delims=" %%i in ("%Quelldatei%") do call :ProcessFolder "%%i"  
goto :eof
:ProcessFolder
echo %~1>>"%Zieldatei%"  
dir /b /s /ad %1>>"%Zieldatei%"  
echo.>>"%Zieldatei%"  

Grüße
bastla
Member: Soidberg
Soidberg May 05, 2007 at 21:08:18 (UTC)
Goto Top
Hy,

es ist ein Problem aufgetreten. Ich habe mich im Aufbau der Quelldatei geirrt.

Die Quelldatei ist (leider Gottes) so augebaut:

~~~

C:\Fotos2006,Eure Bilder 2006
F:\Fotos2007 Januar, Eure Bilder 2007

~~~

Erklärung:

Der Server vergibt virtuelle Pfade mit eigenen Bezeichnungen. In unserem Fall hier trägt der Pfad:

"C:\Fotos2006" in der Weboberfläche die Bezeichnung "Eure Bilder 2006", der zweite Pfad demnach:

"F:\Fotos2007 Januar" mit dem Namen "Eure Bilder 2007".

Es müsste also das Komma und nachfolgende Zeichen gelöscht werden damit dein Lösungansatz funktioniert. Da die original Quelldatei nicht bearbeitet werden darf, muss diese also erst kopiert werden (das bekomme ich alleine hin ;0)), dann editiert und dann weiter durch die Batch bearbeitet (Auflistungsvorgang) werden.

Ist es zusätzlich möglich die ausgegebene AlleOrdner.txt optisch anzupassen? Es wäre sehr nützlich wenn die Hauptordner und deren Unterordner in einem Block und andere Hauptordner mit einem Absatz eingetragen werden. So wäre es optisch leichter zu verfolgen, Beispiel:

~~~
C:\Fotos2006
C:\Fotos2006\Januar
C:\Fotos2006\Februar
<----ABSATZ---->
F:\Fotos2007 Januar
F:\Fotos2007 Januar\Hildesheim
F:\Fotos2007 Januar\Hannover
~~~

Liebe Grüße Soidberg
Member: bastla
bastla May 06, 2007 at 08:02:46 (UTC)
Goto Top
Hallo Soidberg!

Zum Abschneiden des Kommas sowie des darauf folgenden Teiles der Zeile musst Du nur in der "for"-Zeile "delims=," schreiben (ohne die Ordnerliste zu verändern). Voraussetzung ist, dass der Pfad selbst kein Komma enthält, da eben inklusive des ersten gefundenen Kommas der Rest der Zeile ignoriert wird.
Zur Optik: Ich weiß nicht wirklich, was Du unter einem "Absatz" verstehst - derzeit wird bereits mit "echo." (letzte Zeile) nach jedem Block eine Leerzeile erzeugt. Mit weiteren/anderen "echo"-Befehlen (natürlich jeweils mit >>"%Zieldatei%", um in die Ausgabedatei zu schreiben) kannst Du die Trennung zwischen den Blöcken selbst gestalten.

Grüße
bastla
Member: Soidberg
Soidberg May 06, 2007 at 22:28:56 (UTC)
Goto Top
Zur Optik: Ich weiß nicht wirklich,
was Du unter einem "Absatz"
verstehst - derzeit wird bereits mit
"echo." (letzte Zeile) nach jedem
Block eine Leerzeile erzeugt. Mit
weiteren/anderen "echo"-Befehlen
(natürlich jeweils mit
>>"%Zieldatei%", um in
die Ausgabedatei zu schreiben) kannst Du die
Trennung zwischen den Blöcken selbst
gestalten.

Grüße
bastla

Hy,

erstmal vielen Dank, jetzt funktioniert alles soweit sehr gut.

Die Quelldatei sieht so aus:
~~~
C:\testordner,testordner 1
C:\testordner2,testordner 2
~~~

Die Auflistung durch deine .bat so:

~~~
C:\testordner

C:\testordner2

C:\testordner
C:\testordner\Neuer Ordner
C:\testordner\Neuer Ordner\Neuer Ordner
C:\testordner\Neuer Ordner\Neuer Ordner\Neuer Ordner

C:\testordner2
C:\testordner2\Neuer Ordner
C:\testordner2\Neuer Ordner\Neuer Ordner
C:\testordner2\Neuer Ordner\Neuer Ordner\Neuer Ordner
~~~

Die Absätze stimmen jetzt und sind genauso wie ich Sie brauche, allerdings stört mich die doppelte Aufführung (oben fett geschrieben) etwas. Kann man da noch etwas machen? Am schluss sollte es so aussehen:

~~~
C:\testordner
C:\testordner\Neuer Ordner
C:\testordner\Neuer Ordner\Neuer Ordner
C:\testordner\Neuer Ordner\Neuer Ordner\Neuer Ordner

C:\testordner2
C:\testordner2\Neuer Ordner
C:\testordner2\Neuer Ordner\Neuer Ordner
C:\testordner2\Neuer Ordner\Neuer Ordner\Neuer Ordner
~~~

Grüße aus der Nachtschicht...

Soidberg
Member: Soidberg
Soidberg May 06, 2007 at 23:33:25 (UTC)
Goto Top
So, für heute langt es mir und Euch (mit mir) wahrscheinlich auch *grins*

Ich hatte Deinen "if exist" Befehl ausgeklammert und das hier:

C:\testordner

C:\testordner2

waren noch alte "Testdaten", somit wurde die neue Auflistung hinzugefügt und es ergab sich das obige Bild.

*Jetzt nach genauem hinsehen und dem wieder eingliedern des Befehles funktioniert alles und sieht auch aus wie gewollt.* face-smile

Mein Problem wurde also gelöst, hier der fertige, komplette Code:

@echo off & setlocal
pushd %CD%
cd..\..
copy dir.cfg "%CD%\Plugins\Packstation Step 1\dir.cfg"  
popd

set "Quelldatei=%CD%\dir.cfg"  
set "Zieldatei=%CD%\Packbare Ordner.rtf"  
if exist "%Zieldatei%" del "%Zieldatei%"   
for /f "usebackq delims=," %%i in ("%Quelldatei%") do call :ProcessFolder "%%i"  
goto :eof
:ProcessFolder
echo %~1>>"%Zieldatei%"  
dir /b /s /ad %1>>"%Zieldatei%"  
echo.>>"%Zieldatei%"  
del "%CD%\dir.cfg"  

Vielen lieben Dank für die ausdauernde Hilfe.

Nette Grüße Soidberg