reedix
Goto Top

Per Batch Ordner mit bestimmter Benennung suchen und den Inhalt in übergeordneten Ordner verschieben danach Unterordner löschen

Hi Alle,

ich habe ein wenig in eurem Forum "rumgestöbert" und es scheint das hier einige ganz helle köpfe am Werk sind face-smile
persönlich ist mein Wissen was Bachdateien angeht sehr sehr mager und ich hoffe ihr könnt mir Helfen.
Ich benutze als Betriebssystem Vista falls es wichtig für euch zu wissen ist.

Ich habe ein entpackprogramm welches selbstständig alle gepackten Dateien entpackt und diese in den Ursprungsordner belässt. Beispiel ich sage Entpacke alles was in D:\ ist in dem Ordner wo sich die rar Files befinden
und lösche danach die rar Dateien.

Beispiel:

D:\Ordner\Ordner\OrdnerA\*.rar
D:\Ordner\Ordner\OrdnerB\*.rar

Zwei der übergeordneten Ordner in denen sich die rars befinden sind immer gleich, nennen wir sie OrdnerA und OrdnerB, diese können mal tiefer in der Verzeichnisstruktur von D:\ sein oder direkt nach zB. D:\
es kann aber auch so aussehen D:\Ordner\Ordner\Ordner\OrdnerA\*.rar

Ich kann dem Entpackprogramm sagen das es eine Datei ausführen soll nachdem der entpackvorgang stattgefunden hat und diese Datei soll dann die Batch sein die ausgeführt wird, deshalb ist es wichtig das sich die batchdatei an einem festen Ort befindet.

Die Batch soll folgendes tun:

suche OrdnerA in der gesamten Struktur d:\ und verschiebe Inhalt von OrdnerA in den darüberliegenden Ordner und lösche OrdnerA
suche OrdnerB in der gesamten Struktur d:\ und verschiebe Inhalt von OrdnerB in den darüberliegenden Ordner und lösche OrdnerB

ich hoffe ihr habt das einigermaßen verstanden...

Gruß und Danke

Content-Key: 140050

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

Printed on: April 20, 2024 at 04:04 o'clock

Member: Snowman25
Snowman25 Apr 07, 2010 at 12:02:00 (UTC)
Goto Top
Hallo @Reedix,

gibst du uns auch noch den namen deines 'entpackprogrammes'?
ich nehme mal stark an, es ist WinRAR. Aber auf Nummer sicher gehen ist nie schlecht face-wink

gruß
Snow
Member: Biber
Biber Apr 07, 2010 at 12:11:44 (UTC)
Goto Top
Moin Reedix,

willkommen im Forum.
Ergänzend zu Snowman25 noch die Nachfrage
Ich kann dem Entpackprogramm sagen das es eine Datei ausführen soll nachdem der entpackvorgang stattgefunden
?? Kann beim Aufruf durch das Entpackprogramms denn auch der Ordnername/der name der gerade abgefackelten *.rar Archivs als Parameter übergeben werden?

Denn es mach ja wenig Sinn, bei jedem Nachklapp-Entpackprogramm-Folgebatch immer die ganze Platte nach allen *.rar-Files zu durchsuchen....

Grüße
Biber
Member: Snowman25
Snowman25 Apr 07, 2010 at 12:18:24 (UTC)
Goto Top
Zitat von @Biber:
Denn es mach ja wenig Sinn, bei jedem Nachklapp-Entpackprogramm-Folgebatch immer die ganze Platte nach allen *.rar-Files zu
durchsuchen....

Ich bastel trotzdem grade sowas...
zwischenstand:

dir D:\*.rar /A:-D /B /S>rarlist.list
Damit hast du schonmal 'ne liste, in der alle Dateien mit vollem Pfad stehnen, welche auf .rar enden.
Da du ja die .rar-Dateien immer sofort nach dem (erfolgreichen) entpacken löscht, sollte hier nicht zu viel drinstehen.

 for /F "delims=" %%p in (rarlist.list) do (  
Schleife zum durchlaufen der Dateiliste

 del %%~pP
löscht alle .rar-Dateien..
und jetzt hab ich keine lust mehr..
Member: Reedix
Reedix Apr 07, 2010 at 13:29:28 (UTC)
Goto Top
hi und danke für die schnellen antworten.

erstmal die fragen face-smile

1. das programm heisst HIX es ist glaub ich ziemlich unbekannt

2.

?? Kann beim Aufruf durch das Entpackprogramms denn auch der Ordnername/der name der gerade abgefackelten *.rar Archivs als Parameter übergeben werden?

Denn es mach ja wenig Sinn, bei jedem Nachklapp-Entpackprogramm-Folgebatch immer die ganze Platte nach allen *.rar-Files zu durchsuchen....

es geht ja nicht um die suche nach den rar files.. es geht um die suche nach OrdnerA und OrdnerB das entpackprogramm übernimmt die löschung der rar files von selbst..

beilspiel:

D:\Ordner\Ordner\OrdnerA\rar files
D:\Ordner\Ordner\OrdnerB\rar files

ich sag dem enpackprogramm also.. entpacke alle rars die du in D:\ findest..und lösche die rars danach..

der stand sieht dann so aus:

D:\Ordner\Ordner\OrdnerA\dateiA.xyz
D:\Ordner\Ordner\OrdnerB\dateiB.xyz

danach würde dann das programm die batch ausführen die bewirkt das es wie folgt aussieht:

D:\Ordner\Ordner\dateiA.xyz + dateiB.xyz


natürlich isses wie du sagst doof das das programm sinnlos die ganze platte nach den OrdnernA und OrdnernB sucht wenn es sie uU nur einmal gibt aber teilweise gibt es auch auf d:\ verteilt viele ORdnerA und OrdnerB wo die entpackten dateien in die überordner sollen..

folgendes kann ich dem programm sagen was parameter angeht:

After extraction run application XYZ

und auswählen ob

run applycation with every file
run only with files of type xyz
run only one time

superoptimal wäre natürlich wenn die batch so schlau wäre und einfach innerhalb des vom entpackprogramss aktuell erfassten ordner nach OrdnerA und OrdnerB sucht. aber das führt glaub ich zu weit.. ich wüsste jedenfalls nicht wie die batch wissen soll wo das programm grad was tut...

Abschliessend nochmal ich suche keine rars.. ich suche immer OrdnerA und OrdnerB dessen inhalt dann in den übergeortneten Ordner verschoben werden sollen und dann OrdnerA und OrdnerB gelöscht werden sollen
Member: Snowman25
Snowman25 Apr 07, 2010 at 13:48:38 (UTC)
Goto Top
sachma....
HiX hat doch all die Funktionen die du brauchst. Wozu da noch i-was hintendranschieben?
besorg dir mal die neueste Version (hier), stell die Sprache auf Deutsch und dann dürftest du die ganzen optionen verstehen.

Gruß
Snow
Member: Reedix
Reedix Apr 07, 2010 at 14:58:11 (UTC)
Goto Top
so wie ich das verstehe kann das Programm zwar alles löschen und skippen was ich will dennoch bleiben die entpackten Dateien in dem Ursprungsordner in dem entpackt wurde.. das stört mich aber wenn es so aussieht

d:\ordner\ordnerA\dateia
d:\ordner\ordnerB\dateib


ich muss dann händisch dateiA und dateiB in d:\ordner verschieben und ordnerA und ordnerB löschen das etwa 20 mal...ich meine das kann hix nicht


also mir würde das auch reichen wenn es unabhängig vom hix funktiniert.. also das ich einmalig die batch auslösen kann und diese nach OrdnerA und OrdnerB sucht und den inhalt von OrdnerA und OrdnerB in den übergeordneten Ordner verschiebt und anschliessend OrdnerA und OrdnerB löscht.
Member: Reedix
Reedix Apr 08, 2010 at 10:49:08 (UTC)
Goto Top
und..wie sieht es aus... keiner ne idee ??
Member: bastla
bastla Apr 10, 2010 at 22:30:00 (UTC)
Goto Top
Hallo Reedix und, mit etwas Verspätung, willkommen im Forum!

Was Snowman25 meinte (und mit "HiX" auch möglich sein dürfte), ist, gleich beim Entpacken als Ziel den übergeordneten Ordner anzugeben - notfalls mit ".."

Außerdem hätte ich, wie Biber, auch angenommen, dass "HiX" den Pfad zu den entpackten Dateien kennt und daher zumindest diesen an den Batch übergeben könnte, ohne erst auf dem ganzen Laufwerk nach dem jeweiligen Ordner suchen zu müssen ...
Um aber trotzdem einen Ansatz für die ursprüngliche Problemstellung anzubieten:
@echo off & setlocal
for /f "delims=" %%i in ('dir /s /b /ad D:\OrdnerA D:\OrdnerB') do (echo move "%%i\*.*" "%%~dpi" && echo rd /s /q "%%i")  
Damit Du entspannt testen kannst, steht vor dem Verschiebe- bzw Löschbefehl jeweils ein "echo" - solange das dort ist, wird der Befehl nur angezeigt, aber nicht ausgeführt.

Anzumerken wäre noch, dass, sobald Du das "echo" vor dem "move" entfernt hast, auf Teufel komm raus verschoben wird - falls es im übergeordneten Ordner bereits eine gleichnamige Datei gibt, wird diese kommentarlos überschrieben - daher noch die Frage: Ist mit einer solchen Namensgleichheit zu rechnen, und wenn ja, wie soll dann verfahren werden?

Grüße
bastla
Member: Reedix
Reedix Apr 11, 2010 at 16:42:49 (UTC)
Goto Top
Hi Bastla und danke für die mühe,

eine Namensgleichheit der Dateien im übergeordneten Ordner ist ausgeschlossen. Es ist immer eine Datei in OrdnerA und eine in OrdnerB die jeweils verschieden heissen und dann zusammen im übergeordneten landen.

was HiX angeht habt ihr (du und biber) recht.. ich gehe auch davon aus das "hix" den Pfad kennt und den übergeben würde.. wie wäre denn dann die batch aufgebaut bzw wie würdest du/ihr die bekannte batch anpassen damit ich es mal ausprobieren kann.

das was snowman sagt stimmt auch, allerdings entpacke ich keine einzelnen Ordner denen ich dann sage enpacke das in den Überordner, sondern ich mach das alle paar Wochen.. ich sag dann entpacke alles was in D:\ ist ..alle Unterordner einbegriffen und sage da .. enpacke in den Ordner wo die rars waren..


zu deinem Lösungsvorschlag hab ich 3 Anmerkungen:

1. super hat funktioniert face-smile
2. ich würde mir wünschen das nach dem verschieben alle OrdnerA und OrdnerB aus denen verschoben wurde gelöscht werden (aber nur wenn sie leer sind, also erfolgreich verschoben wurden)
3. was dich vielleicht mehr interessiert und überhaupt nicht schlimm ist.. wenn sich direkt unter D:\ OrdnerA oder OrdnerB befindet so passiert nichts beim ausführen der batch.. beispiel.. sieht es so aus D:\OrdnerA dann verschiebt er in der batch nur alle inhalte aus den gefundenen OrdnerB und lässt alle OrdnerA unbearbeitet.. wie gesagt für dich zur info.. das passiert bei mir eh nie das die direkt unter D:\ sind also muss nix geändert werden.
Member: bastla
bastla Apr 11, 2010 at 17:58:45 (UTC)
Goto Top
Hallo Reedix!

Zu 1.: face-smile

Zu 2.: Das Löschen wird durch das "echo" vor dem "rd" verhindert - also auch entfernen ...

Zu 3.: Falls doch der Bedarf auftauchen sollte, unmittelbar in Root liegende Ordner anzusprechen, sollte das so gehen:
for /f "delims=" %%i in ('dir /s /b /ad D:\ 2^>nul^|findstr /e "\\OrdnerA \\OrdnerB"') do (echo move "%%i\*.*" "%%~dpi" && echo rd /s /q "%%i")
Hinsichtlich der Übergabe des Pfades duch "HiX": In diesem Fall könnte der Batch (wieder mit den "Sicherheits-echos") so aussehen:
@echo off & setlocal
echo move "%~1\*.*" "%~dp1" && echo rd /s /q %1  
Grüße
bastla
Member: Reedix
Reedix Apr 11, 2010 at 18:46:19 (UTC)
Goto Top
ahh das mit dem 2. Echo hab ich übersehen..hat bestens geklappt.. der löscht aber nur die Ordner die gerade angesprochen werden und nicht auf der ganzen platte d: oder?

das

01.
@echo off & setlocal
02.
echo move "%~1\*.*" "%~dp1" && echo rd /s /q %1

funktioniert leider nicht.. ich habe es mal direkt im OrdnerA testweise ausgeführt und der fehler ist die syntax für ... ist falsch
Member: bastla
bastla Apr 11, 2010 at 19:17:46 (UTC)
Goto Top
Hallo Reedix!
der löscht aber nur die Ordner die gerade angesprochen werden und nicht auf der ganzen platte d: oder?
Da ja durch die Schleife alle passenden Ordner auf der gesamten Platte D: gesucht werden, ist diese Frage nur mit "ja - doch" zu beantworten. face-wink
ich habe es mal direkt im OrdnerA testweise ausgeführt
Wenn Du (und nicht das Programm) das machst, musst Du dem Batch auch den Pfad als Parameter mitliefern - der Aufruf müsste dann also etwa so aussehen:
Verschieben.cmd D:\Ordner\Ordner\OrdnerA
- allerdings wird das Programm vermutlich ohnehin eher den Pfad zur ".rar"-Datei übergeben - dann müsste der Batch etwas anders aussehen:
@echo off & setlocal
pushd "%~dp1"  
move *.* .. || (popd & goto :eof)
popd
echo rd /s /q "%~dp1"  
Falls allerdings der Batch tatsächlich aus dem "OrdnerA" heraus gestartet würde, sollte sich das Ganze etwa so
@echo off & setlocal
move *.* .. || goto :eof
set "Ordner=%cd%"  
cd \
echo rd /s /q "%Ordner%"  
machen lassen.

Grüße
bastla
Member: Reedix
Reedix Apr 11, 2010 at 20:10:42 (UTC)
Goto Top
ich hab bissl rumprobiert.. bei deiner 2. variante also mit aus ordnerA heraus hat er den inhalt vom hix ordner nach d: verschoben..
also führt hix das aus als wäre es im eigenen ordner.. sprich er übermittelt nix an die batch..

vielen vielen dank für die mühe.. ich fahre mit dem durchsuchen der platte D und dem verschieben sehr gut.. das reicht mir..

das problem ist gelöst face-smile