Dateilistenerstellung

Hallo.

Ich versuche, eine Dateiliste eines Ordners (und der Unterordner) zu erstellen; dabei soll die Liste den Namen des Ordners tragen und nach Möglichkeit auch nicht in den Unterordner erstellt werden, sondern in die Ebene darüber.
Wenn ich also beispielsweise D:\Ordner1\Testordner habe, will ich als Ergebnis, wenn ich die Dateiliste (per Kontextmenü des Ordners) erstelle, die Datei „Testordner.txt“ mit dem Pfad D:\Ordner1\ haben.
Wichtig hierbei ist vor allem die automatische Benennung der Datei mit dem Ordnernamen…

Bisher helfe ich mir mit folgendem Befehl und festem Dateinamen:
dir /a /-p /s /o:gen >dateiliste.txt

Wäre schön, wenn mir jemand weiterzuhelfen wüßte.

Hallo Eisviech,

Ich versuche, eine Dateiliste eines Ordners (und der
Unterordner) zu erstellen; dabei soll die Liste den Namen des
Ordners tragen und nach Möglichkeit auch nicht in den
Unterordner erstellt werden, sondern in die Ebene darüber.
Wenn ich also beispielsweise D:\Ordner1\Testordner habe, will
ich als Ergebnis, wenn ich die Dateiliste (per Kontextmenü des
Ordners) erstelle, die Datei „Testordner.txt“ mit dem Pfad
D:\Ordner1\ haben.
Wichtig hierbei ist vor allem die automatische Benennung der
Datei mit dem Ordnernamen…
Wäre schön, wenn mir jemand weiterzuhelfen wüßte.

Ich weiss nicht, was Du zur Verfügung hast, aber
z.B. in Perl ist sowas schon „mit dabei“. Die
„Minimallösung“ sähe daher in Perl so aus:[dirscan.pl]

 use strict;
 use warnings;
 use File::Find;

 my %dirs;
 find( sub {push @{ $dirs{$File::Find::dir} }, $\_ }, ' **/temp**' );
 
 for my $dirnam (sort keys %dirs) {
 open my $fh, '\>', "$dirnam.txt" or die "write error, $!";
 print $fh map "$\_\n", @{ $dirs{$dirnam} }
 }

Aufruf:
perl disrscan.pl

Das zu scannende Verzichnis ist hier noch gesondert
einzutragen (/temp). Je nach dem, was tatsächlich in
den Dateien stehen soll, müsste man diese Minimallösung
erweitern.

Grüße

CMБ

Hi Claudio,

in welchem Dateiformat erwrtest du eine Lösung?
Würde dir eine .vbs .exe reichen die das macht?
Klar, eine exe hat zwei Nachteile, ohne Quellcode kann man da nichts ändern. Logo, paar Bytes kann man abändern, aber dazu muß man schon soviel Wissen haben daß man sie sich selbst schreiben könnte.
Wichtiger ist, daß so eine exe natürlich was an deinem System machen könnte.
Aber wenn sie hier von vertrauten Namen käme, starte ich sie unbesorgt.

Persönlich würde ich die .vbs vorziehen, denn daran könnte ichh ggfs. etwas ändern, zur Not mit Nachfrage hier, was eigentlich und wie.

Da ich weder vbs kann noch eine exe erzeugen, zwar sehr gutes aber veraltetes Dos3.3 Wissen zu Batches habe, kann ich dir nicht direkt helfen:frowning:

Gruß
Reinhard

Ich versuche, eine Dateiliste eines Ordners (und der
Unterordner) zu erstellen; dabei soll die Liste den Namen des
Ordners tragen und nach Möglichkeit auch nicht in den
Unterordner erstellt werden, sondern in die Ebene darüber.
Wenn ich also beispielsweise D:\Ordner1\Testordner habe, will
ich als Ergebnis, wenn ich die Dateiliste (per Kontextmenü des
Ordners) erstelle, die Datei „Testordner.txt“ mit dem Pfad
D:\Ordner1\ haben.
Wichtig hierbei ist vor allem die automatische Benennung der
Datei mit dem Ordnernamen…

Bisher helfe ich mir mit folgendem Befehl und festem
Dateinamen:
dir /a /-p /s /o:gen >dateiliste.txt

Wäre schön, wenn mir jemand weiterzuhelfen wüßte.

Erm…hallo und danke für die Hilfsansätze schon mal…
Zur Zeit arbeite ich halt mit einer simplen Batch-Datei mit genanntem Inhalt, die ich über das Kontext-Menü aufrufen kann; erstellt wird also eine Textdatei mit dem Namen „dateiliste.txt“ im Ordner, dessen Inhalt aufgelistet wird.
Ich hatte vor einiger Zeit schon einmal eine Shell-Erweiterung gefunden, die eben eine Dateiliste unter Berücksichtigung verschiedener Einstellungen erstellen kann (ist aber unauffindbar, ich suche schon einige Zeit danach); daher dachte ich eben, es gebe eine Lösung für das Problem auf diese einfache Weise.

Ehrlich gesagt hatte ich auch die Hoffnung, daß sich das auf diese einfache Weise, per Batch oder ähnlich, lösen ließe, da ich von Sachen wie VBS und Perl keinen Schimmer habe.

Hallo,

Ehrlich gesagt hatte ich auch die Hoffnung, daß sich das auf
diese einfache Weise, per Batch oder ähnlich, lösen ließe, da
ich von Sachen wie VBS und Perl keinen Schimmer habe.

Das geht mit Batch, ist aber im Vergleich zu
spezialisierten Tools wie Perl unendlich viel
schmerzhafter.

Um meine Variante zum Laufen zu bekommen, musst
Du wie folgt vorgehen:

  1. http://downloads.activestate.com/ActivePerl/Windows/…
    runterladen und installieren.

  2. Dos-Box öffnen und
    perl
    eingeben. Wenn es gefunden wird, ist es im Pfad und
    alles ist perfekt (sonst Reboot oder PATH prüfen).

  3. mein Programm als dirscan.pl abspeichern (irgendwo),
    das Top-Verzeichnis eingeben (statt ‚/temp‘ eben
    ‚/eisviech/daten‘ oder so). Das sollte alles
    auf dem selben Drive (z.B. C:smile: liegen (dann kann man
    das Drive weglassen). Achtung: nicht \ sondern /

  4. Das Programm mit
    perl dirscan.pl
    starten. Nun befinden sich in jedem Unterverzeichnis
    die entsprechenden Dateien (je [Verzeichnisname].txt).

Grüße

CMБ

Das geht mit Batch, ist aber im Vergleich zu
spezialisierten Tools wie Perl unendlich viel
schmerzhafter.

Um meine Variante zum Laufen zu bekommen, musst
Du wie folgt vorgehen:
1)
http://downloads.activestate.com/ActivePerl/Windows/…
runterladen und installieren.

Ja…deine Perl-Variante funktioniert jetzt so, wie du es beabsichtigt hattest.
Aber mein Ziel war, daß ich die Liste für jeden Ordner einzeln, am besten wirklich per Kontextmenü, erstellen kann; so, daß ich auf einen Ordner rechtsklicke, aus dem Menü „Dateiliste erstellen“ auswähle, und dann für diesen spezifischen Ordner eine Liste mit dessen Namen auf Ebene des Ordners erstellt wird.

Hallo Eisviech,

ich hätte da folgenden Vorschlag:----- SCHNIPP: datlist1.bat -----
@echo off
if „%~1“ EQU „“ goto errout
if „%~2“ NEQ „“ goto errout

set dest=…/%~n1.txt
set srcd=%~1

cd %~1
dir /s /o:gen > %dest%
exit /b 0

:errout
echo Falscher Aufruf! %0 %1
pause
exit /b 1
----- SCHNAPP: datlist1.bat -----Dieses Batchskript kannst Du über die Dateioptionen dem Typ „Ordner“ als ‚\datlist1.bat „%1“‘ zuweisen. Und den DIR-Befehl kannst Du nach Deinen Wünschen anpassen.

Aber vielleicht gefällt Dir ja auch diese Variante:----- SCHNIPP: datlist2.bat -----
@echo off
if „%~1“ EQU „“ goto errout
if „%~2“ NEQ „“ goto errout

set dest=%~n1.txt
set srcd=%~1

cd %~dp1
( for /f „usebackq tokens=*“ %%f in ( xcopy "%srcd%" /l /e /h^|findstr /v "kopiert" ) do call :repl „%%f“ ) > %dest%
exit /b 0

:repl
set x=%~1
set y=echo !x:%srcd%=!
%y%
exit /b 0

:errout
echo Falscher Aufruf! %0 %1
pause
exit /b 1
----- SCHNAPP: datlist1.bat -----Für diese Variante muss die verzögerte Variablenerweiterung aktiviert sein. Außerdem bin ich von einer deutschsprachigen Rückmeldung von „XCOPY“ ausgegangen: findstr /v " kopiert"
Bei anderen Sprachen muss das noch angepasst werden.

Gruß
Volkmar

(Anm.: Damit die Lables zu erkennen sind, habe ich ein Leerzeichen davor gemacht. Diese müssen in der BAT-Datei selbst entfernt werden, so dass die „:“ das erste Zeichen in der Zeile ist!)

Hallo,

Aber mein Ziel war, daß ich die Liste für jeden Ordner
einzeln, am besten wirklich per Kontextmenü, erstellen kann;
so, daß ich auf einen Ordner rechtsklicke, aus dem Menü
„Dateiliste erstellen“ auswähle, und dann für diesen
spezifischen Ordner eine Liste mit dessen Namen auf Ebene des
Ordners erstellt wird.

Das geht auch.

  1. Eine Datei mydirscan.bat (mit einer Zeile) in c:\ anlegen
    [c:\mydirscan.bat]

    @perl c:/mydirscan.pl

  2. Die (in der .bat aufgerufene)
    leicht veränderte Perl-Datei in C:\ ablegen:
    [c:\mydirscan.pl]

    use strict;
    use warnings;
    use File::Find;
    use Cwd;

    my %dirs;
    find( sub {push @{ $dirs{$File::Find::dir} }, $_ }, cwd() );

    for my $dirnam (sort keys %dirs) {
    open my $fh, ‚>‘, „$dirnam.txt“ or die „write error, $!“;
    print $fh map „$_\n“, @{ $dirs{$dirnam} }
    }

  3. Im Explorer (Extras/Ordneroptionen/Dateitypen) einen
    Eintrag unter [Ordner] oder [Dateiordner] anlegen, bei
    dem oben der name im Kontextmenü steht (z.B. „My Dirscan“)
    und unten die Applikation, also c:\mydirscan.bat

OK/OK - fertig

Grüße

CMБ

Volkmars Lösung funktioniert exakt so, wie es gewünscht war…herzlichen Dank an dieser Stelle… :smile:

Danke auch an Semjon; diese Lösung habe ich noch nicht probiert, werde ich aber bei Gelegenheit auch austesten. Auf jeden Fall danke für die schnelle und kompetente Beratung in dieser Sache. :smile:

Hallo Eisviech,

ich habe da von einem Problem mit Verzeichnissen mit Leerzeichen im Namen gelesen. Hier die Korrektur:----- SCHNIPP: datlist1.bat -----
@echo off
setlocal
if „%~1“ EQU „“ goto errout
if „%~2“ NEQ „“ goto errout

set dest=%~dp1%~n1.txt
set srcd=%~dpn1

pushd „%srcd%“
dir /s /o:gen > „%dest%“
popd
exit /b

:errout
echo Faslcher Aufruf! %0 %1
pause
----- SCHNAPP: datlist1.bat -----bzw.:----- SCHNIPP: datlist2.bat -----
@echo off
setlocal
if „%~1“ EQU „“ goto errout
if „%~2“ NEQ „“ goto errout

set dest=%~dp1%~n1.txt
set srcd=%~dpn1

( for /r „%srcd%“ %%f in ( * ) do call :repl „%%f“ ) > „%dest%“
exit /b

:repl
set x=%~1
set y=echo !x:%srcd%=!
%y%
exit /b 0

:errout
echo Faslcher Aufruf! %0 %1
pause
----- SCHNAPP: datlist2.bat -----Das Problem ist, dass die Leerzeichen als Kommandotrenner angesehen werden. Um das zu vermeiden muss man den Dateinamen in Anführungszeichen (") setzen.

Gruß
Volkmar

P.S.: Wieder daran denken die Leerzeichen vor den Lables zu entfernen!