Dateien aus unterordner per Batch verschieben

meph!sto

Rear Admiral
Registriert
Nov. 2003
Beiträge
6.114
Hi,
ich habe einen Ordner A in dem befinden sich unzählige Unterordner.
In diesen Unterordner befinden sich wiederrum *.jpg

Diese möchte ich nun gerne per Batch in Ordner B verschieben.

Hatte gehofft dass die Syntax so aussähe.

Code:
 move /y "Pfad Ordner A\*\*.jpg" "Pfad Ordner B"

Scheinbar funktioniert das aber nicht.
Bitte um Hilfe, danke.
 
Also bei mir funktioniert es so:

1. Ordner 1 und 2 auf D:\
2. In Ordner 1 ist eine PDF- und eine JPG-Datei
3. Dieser Befehl wird ausgeführt:

move d:\1\*.jpg d:\2

4. Die PDF-Datei ist in Ordner 1, die JPG-Datei in Ordner 2

Vielleicht hast Du ungültige Zeichen in Deiner Syntax!? Also Ordnernamen o.ä.
 
Der Befehl von mephisto kann so gar nicht klappen, weil der Lösungsansatz schon logische Fehler beinhaltet.

Mit dem Wildcard "*" erreichst du keine Schleife. Hier fehlt einfach das mehrfache Ausführen des Befehls. Das erreichst du nur per for /F Befehl.

Der Hinweis von Tankred 12:33 geht ebenso am Problem vorbei, da hier nur multible Dateien berücksichtigt werden, nicht aber deren Ablage in mehreren Ordnern.


Hier die Lösung für dein Problem:

FOR /F %i IN ('dir /ad /b OrdnerA') DO copy OrdnerA\%i\*.jpg OrdnerB

Hier die Hilfe zum For Befehl, dann sollte es klarer werden:
FOR /F ["Optionen"] %Variable IN (Befehl) DO Befehl [Parameter]

Wenn du das ganze in einer Batch verwenden willst, dann ist %i durch %%i zu ersetzen.


Viele Grüße
 
easy.2ci schrieb:
Der Hinweis von Tankred 12:33 geht ebenso am Problem vorbei, da hier nur multible Dateien berücksichtigt werden, nicht aber deren Ablage in mehreren Ordnern.

Da hast Du recht, ich habe ein "*" übersehen und den sprachlichen Fehler in der Anfrage falsch gedeutet.
 
@easy
Das funktionierst schonmal ganz gut, allerdings kopiert er nicht nur eine weitere Ebene.

Bei OrdnerA\Sub1\Sub2 kopiert er somit nicht die Dateien in Sub2

EDIT: So scheints zu gehen:

FOR /F %%i IN ('dir /ad /b OrdnerA /S') DO copy %%i\*.jpg OrdnerB

oder als Batchdatei (Aufruf mit batchname Quellordner Zielordner Dateien):

@echo off
if %1!==! goto ende --- falls kein Parameter 1 angegeben wurde, wird abgebrochen
if %2!==! goto ende --- falls kein Parameter 2 angegeben wurde, wird abgebrochen

FOR /F %%i IN ('dir /ad /b %1 /S') DO copy %%i\%3 %2
pause

:ende
pause
 
Zuletzt bearbeitet:
korrekt. mit der /s Erweiterung gehts auch bei beliebig vielen Unterordnern.

Ganz wichtig:

%i falls es direkt in der Commandozeile ausgeführt wird
%%i falls es in einer Batchdatei verwendet wird. Ansonsten nimmt die Batch für %i den ersten Parameter der beim Aufruf an die Batch übergeben wurde, was hier ja nun falsch wäre.




Wer Spaß dabei hat solche Sachen zu lösen, dem kann ich die Stellenausschreibung von GDATA in der aktuellen c't Seite 238 empfehlen.

Gruß
 
Zuletzt bearbeitet:
Genau, %1, %2, %3 sind dann die Parameter, die beim Aufruf der Batchdatei übergeben werden.
 
Öhm, ok Jungs, mal langsam ;)

Ordner 1 hat den Pfad "G:\Programme\Miranda IM\Received Files"
Ordner 2 hat den Pfad "F:\Misc\Pics"

Sähe dann die Batchdatei so aus ?

Code:
@echo off
%1 = "G:\Programme\Miranda IM\Received Files"
%2 = "F:\Misc\Pics"
if %1!==! goto ende --- falls kein Parameter 1 angegeben wurde, wird abgebrochen
if %2!==! goto ende --- falls kein Parameter 2 angegeben wurde, wird abgebrochen

FOR /F %%i IN ('dir /ad /b %1 /S') DO copy %%i\%3 %2
pause

:ende
pause

Wäre das richtig ?
Wo trage ich dort die Ordnerpfade ein ?

Btw: ich habe davon 0 Ahnung, deswegen frage ich ja euch :)
 
ja klappt. Interessante Sache um z.B. alle Logfiles aus %systemroot%\system32\Logfiles von mehreren Systemen einzusammeln und dann zentral auszuwerten.

hm...kommt gleich auf meine ToDo Liste



edit: Nee der Code wäre:
@echo off
if %1!==! goto ende --- falls kein Parameter 1 angegeben wurde, wird abgebrochen
if %2!==! goto ende --- falls kein Parameter 2 angegeben wurde, wird abgebrochen

FOR /F %%i IN ('dir /ad /b %1 /S') DO copy %%i\%3 %2
:ende

Und der Aufruf wäre:
MyBatchFile "G:\Programme\Miranda IM\Received Files" "F:\Misc\Pics" *.jpg
 
Zuletzt bearbeitet:
Und wenn ich diese Batchdatei aus einer anderen aufrufen will,
dann wäre das doch

call ... oder ?

Edit:

Sorry, wie übergeb ich der Batch denn die Ordnerpfade ? Ich versteh das nicht :(
 
Zuletzt bearbeitet:
Im Screenshot siehst du alle relevanten Sachen
 

Anhänge

  • Screen.jpg
    Screen.jpg
    96,9 KB · Aufrufe: 3.117
Einfach hinter den Namen schreiben:

NamederBatchdate Pfad1 Pfad2 Datei(en)

call copyx.bat C:\Ordner1 D:\Ordner2 *.jpg



Jetzt müßte das noch mit 'move' funktionieren...
 
Sorry,
aber ich versteh das immernoch nicht.
Ich möchte einfach eine *.bat Datei auf die ich drauf klicke und die Dateien verschoben werden.
Bezeichnet mich gerne als dumm, aber ich verstehe es leider immernoch nicht.

Habe nun 2 *.bat.
movemiranda.bat =

@echo off
if %1!==! goto ende --- falls kein Parameter 1 angegeben wurde, wird abgebrochen
if %2!==! goto ende --- falls kein Parameter 2 angegeben wurde, wird abgebrochen

FOR /F %%i IN ('dir /ad /b %1 /S') DO copy %%i\%3 %2
:ende

movemiranda2.bat =

movemiranda.bat "G:\Programme\Miranda IM\Received Files" "F:\Misc\Pics" *.jpg

Wenn ich nun die movemiranda2.bat ausführe passiert nix.
 
Je nach Ordnerstruktur dauert es eine Weile, bis er mit dem Kopieren anfängt.

call movemiranda.bat "G:\Programme\Miranda IM\Received Files" "F:\Misc\Pics" *.jpg

Verschieben mit Robocopy:

@echo off
if %1!==! goto ende --- falls kein Parameter 1 angegeben wurde, wird abgebrochen
if %2!==! goto ende --- falls kein Parameter 2 angegeben wurde, wird abgebrochen
if %3!==! goto ende --- falls kein Parameter 3 angegeben wurde, wird abgebrochen

FOR /F %%i IN ('dir /ad /b %1 /S') DO robocopy %%i %3 %2 /mov

:ende

Echo.

Pause
 
Zuletzt bearbeitet:
Da poppt ein DOS Fenster auf und geht sofort wieder zu.
Kopiert/Verschoben wird dabei nix.

habe auf meiner XP Maschine kein robocopy.
 
Zuletzt bearbeitet:
Evt. mußt Du beim Aufruf der zweiten Batch den kompletten Pfadnamen eingeben.

Mach mal in der Movemiranda2.bat hinter den ersten Befehl ein PAUSE, dann siehst Du die Fehlermeldung.

Robocopy kannst Du zur not runterladen. Ist Teil des Server2003 resource Kits (unter XP funktioniert die Vista-Version nicht!).
 
Habe mal einen Screenshot angefügt.
 

Anhänge

  • test.jpg
    test.jpg
    29,9 KB · Aufrufe: 1.079
Ich meinte das so:

In der Movemiranda2:

call movemiranda.bat "G:\Programme\Miranda IM\Received Files" "F:\Misc\Pics" *.jpg
pause
 
Zurück
Oben