a3rosol
Goto Top

Datei eine Hierarchieebene nach oben verschieben per Batch

Hallo liebe Admins,

ich habe da ein lästiges Problem, was sich hoffentlich mit eurer Hilfe beseitigen lässt.
Es existiert folgende Ordnerstruktur:

Videos
-Video 1
--Film
->Film.mov

und zwar in mehrfacher Ausführung (so viele, dass es zu lange dauern würde um es per Hand zu machen).
Wie der Titel sagt, soll (bzw sollen) alle Dateien im Unterordner "Film" in den Ordner "Video 1" (etc.) verschoben werden, und der Ordner "Film" bei Erfolg gelöscht werden.
Wie sähe das Script aus?

Unterordner aus Ordner eine Ebene nach oben verschieben?

Das Beispiel klappt bei mir nicht, bekomme nicht mal ne Fehlermeldung...
Schönes Wochenende noch!

Content-ID: 134778

Url: https://administrator.de/forum/datei-eine-hierarchieebene-nach-oben-verschieben-per-batch-134778.html

Ausgedruckt am: 22.12.2024 um 22:12 Uhr

AndreasBrecht
AndreasBrecht 31.01.2010 um 07:27:34 Uhr
Goto Top
  Dim fs, fld
  Set fs = CreateObject ("scripting.FileSystemObject")  

  For Each fld in In fs.Getfolder("Videos") .SubFolders   'da sollte der komplette Pfad übergeben werden   
    fs.MoveFile fld.Path &"\Film.mov", "videos\Film.mov"   'siehe oben ;-)  
    fs.DeleteFolder fld.Path
  Next fld

und das end tag vergessen - morgens um 7 halt
miniversum
miniversum 31.01.2010 um 10:27:09 Uhr
Goto Top
Hast du das Beispiel direkt an der cmd eingegeben oder in einer Batch verwendet?
Was passiert den? Hast du die Ausgabe?
a3rosol
a3rosol 31.01.2010 um 10:33:51 Uhr
Goto Top
was ist das für eine Programmiersprache? VisualBasic? oder VbS? wie setze ich das um?
a3rosol
a3rosol 31.01.2010 um 10:36:10 Uhr
Goto Top
ich habe das beispiel von Biber
for /d %i in ("e:\todo\_ok\*.*") do @for /d %j in ("%i") do @echo move %j e:\todo\_ok  
im cmd eingegeben und im Testodner hat sich nichts getan, und es sind auch keine Fehlermeldungen aufgetreten...
miniversum
miniversum 31.01.2010 um 10:59:41 Uhr
Goto Top
Durch das @echo sollte auch erstmal nicht wirklich etwas verschoben werden sondern nur eine Anzeige.

Versuchs mal damit:
@for /d %i in ("e:\todo\_ok\*.*") do @for /d %j in ("%i") do @echo move "%~j\%~nxj.*" %j  
Auch hier kommt erstmal nur eine Anzeige was passieren wird.
Wenn diese ausgabe passt kdan kannst du das echo entfernen
AndreasBrecht
AndreasBrecht 31.01.2010 um 11:33:11 Uhr
Goto Top
Das ist VB script geht aber auch in VBA da kann man dann sogar mit früüher Bindung arbeiten aber für den 4 Zeiler tut es auch so face-smile
a3rosol
a3rosol 31.01.2010 um 12:08:28 Uhr
Goto Top
ist in Zeile 4 das In doppelt? Noch Zeile 4: muss zwischen ") und .SubFolders wirklich ein leerzeichen? und muss in zeile 7 das script nicht beendet werden? (Error: Anweisungsende erwartet...)
a3rosol
a3rosol 31.01.2010 um 12:13:55 Uhr
Goto Top
http://picfront.de/d/7lti

da scheint was nicht richtig zu laufen...
vielleicht habe ich mich ja nicht richtig oder falsch ausgedrückt, deswegen versuche ich es nochmal
durchsuche Verzeichnis rekursiv nach Ordnername "Film";  
nimm sämtliche Dateien aus dem Ordner und Verschiebe sie in den übergeordneten Ordner;
wenn alles Ok ist, lösche den Order "Film";  
Und alles nochmal beim Nächsten ;)
miniversum
miniversum 31.01.2010 um 12:28:41 Uhr
Goto Top
Ok. Ich ging davon aus das der Film in dm Ordner immer so geist wie der Ordner selbst.
Das löschen fehlte noch. Aber sonsnt scheint e doch zu passen?
Wenn es alle Dateien sein sollen dann so:
@for /d %i in ("e:\todo\_ok\*.*") do @for /d %j in ("%i") do (@echo move "%~j\*.*" %j && @echo rd /Q %j)  
Auch hier wird nur angezeigt was passieren wird. Wenn das gut aussieht dann das echo entfernen.
Oder ist der name FILM immer fest?
Dann könnte es (ungetestet) so funktionieren:
@for /d %i in ("e:\todo\_ok\*.*") do (@echo move "%~i\FILM\*.*" %i && @echo rd /Q "%~i"%~i\FILM")  
a3rosol
a3rosol 31.01.2010 um 12:36:31 Uhr
Goto Top
es ändert sich immer nur der Überordner (Asterix I, Bad Boys etc) und die Dateinamen samt Dateityp im Ordner Film

Edit: auf den 2ten Vorschlag: es kommt immer die Rückmeldung "Mehr?"

Edit2: die Verzeichnisstruktur: http://picfront.de/d/7ltM
miniversum
miniversum 31.01.2010 um 12:54:12 Uhr
Goto Top
Also bei der Frage nach mehr kann ich auch nichts zu sagen. Aber es muss am rd liegen. Daher sollte es zumindest gehen wenn du es so versuchst:
@for /d %i in ("e:\todo\_ok\*.*") do (@echo move "%~i\FILM\*.*" %i)  
Die leeren Verzeichnisse bleiben dann allerdings.
AndreasBrecht
AndreasBrecht 31.01.2010 um 12:58:42 Uhr
Goto Top
Sorry das Leerzeichen ist in der Tat zu viel und das in ist doppelt (wenigstens sind alle Fehler in einer Zeile konzentriert)
und Nein ein End braucht es nicht (in VB script)
a3rosol
a3rosol 31.01.2010 um 13:01:56 Uhr
Goto Top
hab jetzt den Befehl abgefeuert:
@for /d %i in ("e:\Videos\*.*") do (move "%~i\FILM\*.*" %i)  

Bei allen sagt er Syntaxfehler, nur beim letzten hats geklappt ;) (*freu*)
a3rosol
a3rosol 31.01.2010 um 13:03:39 Uhr
Goto Top
er haut mir trotzdem um die Ohren, dass er in Zeile 7 Zeichen 8 das Anweisungsende erwartet (die anderen Fehlerchen hab ich behoben)...
AndreasBrecht
AndreasBrecht 31.01.2010 um 13:23:11 Uhr
Goto Top
Nochmal Sorry : lass einfach das fld hinter dem Next weg (das geht nur in richtigem VBA)
insgesamt war es Heute Morgen doch früher als ich dachte
bastla
bastla 31.01.2010 um 13:51:28 Uhr
Goto Top
Hallo a3rosol!

Versuch mal:
@for /d %i in ("e:\Videos\*.*") do (move "%i\FILM\*.*" "%i" && rd "%i\FILM")
Grüße
bastla
a3rosol
a3rosol 31.01.2010 um 14:00:14 Uhr
Goto Top
perfekt vielen dank an alle ;)