Batch Verzeichnis der zu kopierenden Datei übergeben

soendi

Newbie
Registriert
Jan. 2014
Beiträge
3
Moin zusammen, sehe gerade den Wald vor lauter Bäumen nicht mehr - ich weiss, wo mein Fehler ist, weiss aber nicht, wie ich ihn beheben kann... so auf die Schnelle. Vielleicht hat wer von euch eine schnelle Lösung:

Ich möchte aus allen Unterordnern die Datei "folder.jpg" eine Ebene höher kopieren.

for /f "delims=" %i in ('dir D:\Musik /b /s folder.jpg') do copy %i ..

Funktioniert auch soweit, nur dass er die Datei natürlich nicht ins Überverzeichnis von %i schiebt, sondern ins Überverzeichnis dieses Ordners, aus welchem der Aufruf gestartet wurde...

Was jetzt ist:
copy D:\Musik\Interpret\Album\folder.jpg C:\Users\soendi\
(Wenn ich diesen Aufruf vom Desktop starte)

Was sein sollte:
copy D:\Musik\Interpret\Album\folder.jpg D:\Musik\Interpret

Wie kann ich dem Aufruf die Zielvariable richtig mitgeben?

Danke für eure Hilfe
Grüsse
soendi
 
Hi,
wie wäre es mit:
Code:
@Echo Off
For /F "Tokens=*" %%i In ('Dir /B /S "D:\Musik\Interpret\Album\folder.jpg"') Do Echo Move /Y "%%~fi" "D:\Musik\Interpret"
Pause
Zum Testen mit echo, alles ungetestet!
 
Wenn ich dich richtig verstanden habe, dann geht das so:

Code:
@echo off
SETLOCAL EnableDelayedExpansion 

for /f "delims=" %%i in ('dir D:\Musik\folder.jpg /b /s ') do (
	set filepath=%%i
	set filepath=!filepath:folder.jpg=!
	copy "%%i" "!filepath!.."
	)
 
Nicht ganz, ich habe ja nicht nur eine Datei folder.jpg, welche ich kopieren möchte.
Ich habe hunderte Interpreten-Ordner und darunter verschiedene Alben, welche jeweils eine folder.jpg beinhalten.

Mein Vorhaben: Suchen nach "folder.jpg", copy ..\Interpret1\Album1\folder.jpg ..\Interpret1
Mir ist klar, dass bei mehreren Alben nur 1 folder.jpg kopiert werden kann, macht aber nix...

Es muss nicht schön sein, ist eine einmalige Sache....

Mir würde es reichen, wenn:
folder.jpg suchen, Dateipfad ausgeben, Wechsel ins Verzeichnis der gefundenen folder.jpg, dann mit copy folder.jpg .. ein Verzeichnis hochschieben....

Code:
Musik
   Interpret 1
      Album 1
         folder.jpg
      Album 2
         folder.jpg

   Interpret 2
      Album 1
         folder.jpg
      Album 2
         folder.jpg
      Album 3
         folder.jpg

in etwa so:? (die Datei(en) folder.jpg liegen NICHT in D:\Musik, sondern in den Album-Ordnern)

Code:
@echo off
for /f "delims=" %%i in ('dir D:\Musik folder.jpg /b /s ') do (
   set filepath=%%i
   cd %filepath%
   copy folder.jpg .. /y
   )

Das will aber auch nicht...


DjNDB schrieb:
Wenn ich dich richtig verstanden habe, dann geht das so:

Code:
@echo off
SETLOCAL EnableDelayedExpansion 

for /f "delims=" %%i in ('dir D:\Musik\folder.jpg /b /s ') do (
	set filepath=%%i
	set filepath=!filepath:folder.jpg=!
	copy "%%i" "!filepath!.."
	)
 
Hmm. In meinen Tests hat mein Skript genau das gemacht: Die folder.jpg aus allen Unterverzeichnissen von D:\Musik ein Verzeichnis höher kopiert.


Bei deiner Modifikation hast du alles rausgenommen was deine Fehler behoben hat...:
- "dir D:\Musik\folder.jpg /b /s" durch "dir D:\Musik folder.jpg /b /s" ersetzt
- DelayedExpansion deaktiviert, dann kannst du innerhalb von blöcken (z.B.) for schleifen keine variablen verwenden die du innerhalb von ihnen gesetzt hast
- Das entfernen des Dateinamens vom Ergebnis entfernt

Ersetz in meinem Skript einfach mal das copy durch echo, dann siehst du was rauskommt.
 
Zuletzt bearbeitet:
Ich Depp - sorry, habe es verschlimmert.
Das Skript funktioniert wie eine 1..... :)

Danke vielmals!!
Grüsse
soendi

DjNDB schrieb:
Hmm. In meinen Tests hat mein Skript genau das gemacht: Die folder.jpg aus allen Unterverzeichnissen von D:\Musik ein Verzeichnis höher kopiert.


Bei deiner Modifikation hast du alles rausgenommen was deine Fehler behoben hat...:
- "dir D:\Musik\folder.jpg /b /s" durch "dir D:\Musik folder.jpg /b /s" ersetzt
- DelayedExpansion deaktiviert, dann kannst du innerhalb von blöcken (z.B.) for schleifen keine variablen verwenden die du innerhalb von ihnen gesetzt hast
- Das entfernen des Dateinamens vom Ergebnis entfernt

Ersetz in meinem Skript einfach mal das copy durch echo, dann siehst du was rauskommt.
 
Zurück
Oben