Unterordner in einem Ordner mit einem Klick öffnen ?

German support forum

Moderators: Hacker, Stefan2, white

tc-neuling
Junior Member
Junior Member
Posts: 30
Joined: 2011-03-07, 12:11 UTC

Post by *tc-neuling »

Wenn es einen virtuellen Orden gäbe, hättest Du ihn jetzt von mir. Dalei, Respekt. Es hat geklappt. Vielen herzlichen Dank. Auch das Nachvollziehen meiner Fragen und das Eingehen auf diese, haben
mir sehr sehr geholfen. Kennst Du das Gefühl, wenn eine Lampe
angeht ? :idea: Ich hab jetzt erst begriffen, was Du/wir da eigentlich gemacht haben. Das ich jetzt sehr erleichtert bin, kannst Du Dir vorstellen.

In der Hoffnung, das Du nicht die Augen verdrehst, möchte ich wissen, ob es Dir möglich ist, Dein Skript so zu bearbeiten, das es folgendes machen kann.

1. Ein Haupt-Ordner und darunter bis zu 4 Unterordnern, wo alle Dateien in den Hauptordner verschoben werden
Beispiel: Hauptordner-Unterordner a, Unterordner b, Unterordner c,
also Dateien aus a, b und c in den Hauptordner

und

2. mehrere Hauptordner mit jeweiligen Unterordnern, wo die Dateien dann in die dazugehörigen Hauptordner verschoben werden können.

Danke für´s Lesen und Helfen, Du hast mir sehr geholfen und weißt gar nicht, wie sehr wirklich............

tc-neuling
User avatar
Dalai
Power Member
Power Member
Posts: 9990
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

tc-neuling wrote:1. Ein Haupt-Ordner und darunter bis zu 4 Unterordnern, wo alle Dateien in den Hauptordner verschoben werden
Beispiel: Hauptordner-Unterordner a, Unterordner b, Unterordner c,
also Dateien aus a, b und c in den Hauptordner
Damit ich das jetzt richtig verstehe: Liegen die Verzeichnisse a, b, c und d alle in derselben Ebene, d.h. sind Unterverzeichnis von, sagen wir, Hanswurst? Oder geht's um verschachtelte Verzeichnisse, d.h. d ist Unterverzeichnis von c und c ist Unterverzeichnis von b usw?

Nochmal anschaulich:
Selbe Ebene:

Code: Select all

Hanswurst
|-a
|-b
|-c
|-d
oder verschachtelt:

Code: Select all

Hanswurst
|-a
  |-b
    |-c
      |-d
2. mehrere Hauptordner mit jeweiligen Unterordnern, wo die Dateien dann in die dazugehörigen Hauptordner verschoben werden können.
Das lässt sich machen, solange die Hauptverzeichnisse alle auf derselben Eben liegen. Dann kann man TC anweisen aus den markierten Verzeichnissen eine temporäre Datei zusammenzustellen und diese wird im Skript abgearbeitet. Dafür muss aber das Skript geändert werden.

Bevor ich aber wieder mit einem Skript komme, bitte ich dich, zu bestätigen, dass ich dich richtig verstanden habe.

MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
tc-neuling
Junior Member
Junior Member
Posts: 30
Joined: 2011-03-07, 12:11 UTC

Post by *tc-neuling »

Beides, wenn das gehen würde. :oops:

1. selbe Ebene, zeitgleich,
Hanswurst 1 - Unterordner-Dateien 1
Hanswurst 2 - Unterordner-Dateien 2
Hanswurst 3 - Unterordner-Dateien 3

(dann bräuchte ich nicht jeden Hanswurst-Ordner markieren, sondern
markiere alle Hanswurst 1-3 und die Dateien sind dann in den
jeweiligen Hanswurst

und ebenso verschachtelt

2. Hanswurst
|-a
|-b
|-c
|-d

So schnell hab ich mit einer Antwort gar nicht von Dir gerechnet.
Das freut mich jetzt sehr.
User avatar
Dalai
Power Member
Power Member
Posts: 9990
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

Naja, verschachtelt geht nicht so einfach, aber um mehrere Verzeichnisse mit Unterverzeichnissen zu bearbeiten, die innerhalb derselben Ebene liegen, würde ich dieses Skript benutzen:

Code: Select all

@echo off

if "%~1"=="" goto :EOF

REM Hauptverzeichnisse
for /F "usebackq delims=" %%a IN ("%~1") DO (
    echo.
    echo %%a
    echo ----------------------------------------
    pushd "%%~a"

    REM Liste aller Unterverzeichnisse erstellen und abarbeiten
    for /F "delims=" %%i IN ('dir /ad /b /ogn') DO (
        echo %%i
        REM Ins Verzeichnis wechseln
        pushd "%%~i"
        REM Alle Dateien eine Ebene nach oben verschieben
        REM move "*.*" ..
        REM Aus dem Verzeichnis wechseln
        popd
        REM Verzeichnis löschen
        REM rmdir "%%~i"
    )
    popd
)

echo.
pause
Als Parameter für den Button ist hier zwingend "%L" nötig!

Und auch hier gilt wieder: erstmal die Ausgaben des Skriptes anschauen und erst dann die REMs entfernen (Zeilen 17 und 21).

MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
tc-neuling
Junior Member
Junior Member
Posts: 30
Joined: 2011-03-07, 12:11 UTC

Post by *tc-neuling »

Manno, cool. Danke. Ich muß morgen testen und melde mich, sobald ich ausgetestet habe. Du bist so klasse....................
tc-neuling
Junior Member
Junior Member
Posts: 30
Joined: 2011-03-07, 12:11 UTC

Post by *tc-neuling »

Hallo Dalei und Alle, die bis hier hin mitgelesen haben.
Es hat geklappt. Ich hab das Skript entschärft und getestet.

Bis zu 10 Unterordner eines Hauptordners hat funktioniert (zu mehr Ordnern habe ich es nicht ausprobiert können )und alle Dateien dieser 10 Unterordner sind in den Hauptordner gelandet.

Sehr sehr gut. Dalei, bedankt hab ich mich schon oft und möchte es
nochmal wiederholen. Du hast mir sehr viel Arbeit erspart und das,
obwohl ich Dir so viel Arbeit gemacht habe.

Das ist mehr, als ich zu hoffen gewagt habe und das nur, wegen einer Frage nach einem einzelnen Klick, um Ordner zu öffnen. Das hier ist ja noch viel besser. Du mußt einen super Beruf
haben. Alles was Du programmierst, macht das, was Du willst.

Einstweilen möchte ich Deine große Geduld wirklich nicht überstrapazieren.

Solltest Du irgendwann Lust und Zeit haben, Dich mit einem Skript wegen der Verschachtelung zu beschäftigen, würd ich mich riesig freuen.

Viele herzliche Grüße
tc-neuling
User avatar
Dalai
Power Member
Power Member
Posts: 9990
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

tc-neuling wrote:Solltest Du irgendwann Lust und Zeit haben, Dich mit einem Skript wegen der Verschachtelung zu beschäftigen, würd ich mich riesig freuen.
Das klappt nicht wirklich, weil man dem Skript zusätzlich mitteilen muss, wieviele Rekursionen es zu machen gilt, bevor gehandelt wird. Oder anders gesagt: wenn die Verzeichnisstruktur tiefer ist als man eigentlich bearbeiten will, dann muss dem Skript gesagt werden, dass es nicht bis zur tiefsten Ebene gehen darf, bevor es anfängt, Dateien zu verschieben.

Dafür bräuchte man einen völlig anderen Ansatz und das ist mir ehrlich gesagt zuviel Aufwand. Denn mit dem/den verfügbarem/n Skript(en) kannst du ja arbeiten - auch wenn das ggf. viel Klickarbeit ist.

MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
tc-neuling
Junior Member
Junior Member
Posts: 30
Joined: 2011-03-07, 12:11 UTC

Post by *tc-neuling »

Das verstehe ich vollkommen, Dalai.

Eine Frage ist mir eben noch in den Sinn gekommen beim Weiterausprobieren. Ich hoffe, Du hast da noch eine Erklärung für.
[img]http://www.abload.de/img/frageoue5.png[/img]
Hier hab ich Dir die Verzeichnisstruktur mit der Fehlermeldung
hochgeladen.

Was hab ich da noch falsch gemacht ? Der Oberordner 3 Bells Mask hat nur einen Unterordner und Dateien sind auch drin.

Viele Grüße
tc-neuling
User avatar
Dalai
Power Member
Power Member
Posts: 9990
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

Mmh, bin ich mir nicht sicher. Hast du irgendein übergeordnetes Verzeichnis mitmarkiert? Oder überhaupt mehrere Ebenen?

MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
tc-neuling
Junior Member
Junior Member
Posts: 30
Joined: 2011-03-07, 12:11 UTC

Post by *tc-neuling »

Ne, hab ich nicht. Die rot Markierten waren für Dich zur Anschauung.
Ich hab eben nochmal mit nur einer Markierung das Bild hochgeladen.

[img]http://www.abload.de/img/fragernku.png[/img]
tc-neuling
Junior Member
Junior Member
Posts: 30
Joined: 2011-03-07, 12:11 UTC

Post by *tc-neuling »

Die Ursache könnte sein, das ich den Ordner mit einem Umlaut
geschrieben habe. Ordnername Bär, dann geht es nicht.
Wird der Ordner auf Baer umbenannt, geht es.

Wenn eine Datei Thumbs.db. im Ordner ist, werden zwar die anderen
Dateien nach in den Hauptordner geschoben, jedoch nicht der Unter-
ordner gelöscht.

Hast Du noch ein Trick auf Lager für die beiden kleinen Schönheitsfehler ?

Ich hab schon so viele Verzeichnisse jetzt aufgeräumt, da hätte ich sonst Tage gebraucht.

Was nun noch die Eingangsfrage mit einem Klick sämtliche Ordner öffnen
betrifft, gibt es noch eine Alternative. Dort, wo die Pfeile sind (links vom Nummernblock der Tastatur), dort die Taste mit dem Pfeil nach rechts gedrückt halten und vorher auf das Verzeichnis gehen. Taste gedrückt halten und der Pfeils scrollt sich durch das Verzeichnis und öffnet damit alle Ordner. Vielleicht für den Einen oder Anderen eine Alternative.
Last edited by tc-neuling on 2011-03-11, 23:42 UTC, edited 1 time in total.
User avatar
Dalai
Power Member
Power Member
Posts: 9990
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

Achja, mal wieder Umlaute... Hätte ich gleich dran denken können.

Da muss man das Skript etwas aufbohren, weil MS völlig unfähig war zur Zeit der Entwicklung von Win2k und das bei XP immernoch nicht korrigierte.

Code: Select all

@echo off

if "%~1"=="" goto :EOF

REM Zeichensatz ermitteln
for /f "skip=4 tokens=3" %%i in (
  'reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage" /v "ACP"'
) do (
  set active_cp=%%i
)

for /f "skip=4 tokens=3" %%i in (
  'reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage" /v "OEMCP"'
) do (
  set oem_cp=%%i
)

REM --- if-Befehl: Würgaround für Windows XP64, wo es in der 32 bit CMD kein chcp mehr gibt
if "[%ProgramFiles(x86)%]" == "[]" chcp %active_cp% > NUL

for /F "usebackq delims=" %%a IN ("%~1") DO (
    echo.
    echo %%a
    echo ----------------------------------------
    pushd "%%~a"

    REM Liste aller Verzeichnisse erstellen und abarbeiten
    for /F "delims=" %%i IN ('dir /ad /b /ogn') DO (
        echo %%i
        REM Ins Verzeichnis wechseln
        pushd "%%~i"
        REM Alle Dateien eine Ebene nach oben verschieben
        REM move "*.*" ..
        REM Aus dem Verzeichnis wechseln
        popd
        REM Verzeichnis löschen
        REM rmdir "%%~i"
    )
    popd
)

REM --- if-Befehl: Würgaround für Windows XP64, wo es in der 32 bit CMD kein chcp mehr gibt
if "[%ProgramFiles(x86)%]" == "[]" chcp %oem_cp% > NUL

echo.
pause
Wenn eine Datei Thumbs.db. im Ordner ist, werden zwar die anderen Dateien nach in den Hauptordner geschoben, jedoch nicht der Unterordner gelöscht.
Auch das ließe sich lösen, ist aber aufwendiger. Es gibt dabei zwei Möglichkeiten:
  • rmdir entsprechende Parameter mitgeben, die den ganzen Verzeichnisbaum wegräumen. Das ist aber sehr gefährlich für andere Daten, die u.U. gar nicht bearbeitet werden sollen.
  • Die Alternative wäre, alle versteckten Dateien sichtbar zu machen und die ebenfalls mit zu verschieben. Nur möchte ich nicht wirklich Attribute manipulieren, denn die müsste ich abspeichern, um sie wiederherzustellen. Die thumbs.db ist ja nur eine der möglichen versteckten Dateien.
Wenn nicht jemand anders noch eine sinnvollere Idee hat, denke ich, dass du damit leben können wirst ;).

MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
tc-neuling
Junior Member
Junior Member
Posts: 30
Joined: 2011-03-07, 12:11 UTC

Post by *tc-neuling »

Hallo Dalai,
danke für das neue Skript. Die Alternative mit dem Sichtbarmachen von
thumbs.db-Dateien ist für mich ok. Ich bin absolut zufrieden mit Deinem
Ergebnis. Toll, das Du so eine Motivation hast, hier zu unterstützen.
Ich weiß das sehr zu schätzen.

Herzliche Grüße
tc-neuling
tc-neuling
Junior Member
Junior Member
Posts: 30
Joined: 2011-03-07, 12:11 UTC

Post by *tc-neuling »

Hallo Dalai,
das neue Skript funktioniert. Super.

Einzig und alleine das Problem mit
den Thumbs bleiben bestehen. Sobald eine Thumb-Datei im Unterordner
ist, wird der Ordner nicht gelöscht. Ich hab alle Dateien sichtbar gemacht.
Mit dem Verschieben klappt es nicht, die Datei bleibt im Unterordner.
Wenn Du also noch einen Tip hast, herzlich gerne.
Viele Grüße und nochmals vielen Dank.

tc-neuling
User avatar
Dalai
Power Member
Power Member
Posts: 9990
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

Vermutlich verschiebt das move im Skript keine Dateien, die das Attribut System haben. Das bedeutet, du müsstest dieses Attribut ebenfalls entfernen. Sinnvoll wäre es, wenn du dir das zu bearbeitende Verzeichnis vorher nimmst und alle darin befindlichen thumbs.db ermittelst und denen alle Attribute abnimmst. Dann das Skript laufen lassen und nachfolgend die Attribute wieder setzen, soweit nötig. Dem Explorer scheinen die Attribute der thumbs.db aber egal zu sein.

MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Post Reply