2017-10-18 3 views
1

... speziell heißt mein Elternordner "Tiles". In diesem Ordner befinden sich Hunderte oder mehr Unterordner, von denen jeder weitere Unterordner enthält. Beispiele wären:Kopieren einzelner Datei in ausgewählte Unterordner

Fliesen/zzOrtho1/Texturen
Fliesen/zzOrtho1/Gelände
Fliesen/zzOrtho1/nav Daten
Fliesen/zzOrtho2/Texturen
Fliesen/zzOrtho2/Gelände
... und so weiter

Ich habe eine Datei im Tiles-Elternverzeichnis mit dem Namen 'water.dds' und ich möchte sie in jeden 'Sub-Unterordner' mit dem Namen 'textures' kopieren, aber keine anderen Ordner.

Dieser Batch-Skript (in diesem Forum gefunden), wenn sie in dem Fliesen-Ordner abgelegt, wird die Datei water.dds zu jedem Ordner und Unterordner im Fliesen übergeordneten Ordner kopieren:

@echo off 
    for /r "%CD%" %%f in (.) do (
     copy "water.dds" "%%~ff" > nul 
    ) 

Aber ich haven‘ Es war in der Lage, es so zu bearbeiten, dass die dds-Datei nur in alle 'Unter-Unterordner', die 'Texturen' genannt werden, kopiert wird.

Alternativ kopiert dies die dds-Datei, die nun in einem eigenen Unterordner 'Tiles/water /' enthalten ist, in einen Ordner Tiles/Textures, aber wieder kann ich nicht sehen, wie man das anpasst, so dass es nach aufgerufenen Ordnern sucht ‚Textures‘ eine Schicht tiefer in die Ordnerstruktur und kopiert water.dds auf alle von ihnen ..

for /D %%x in (textures.*) do copy "water" %%x 

Kann jemand freundlicherweise helfen?

Danke.

Antwort

0

Hier ist, wie Sie es tun (laufen innen übergeordnetes Verzeichnis "Tiles")

@echo off 
for /D /r %%G in (*.*) do (
    if /I "%%~nxG"=="textures" copy "water.dds" "%%~G" > nul   
) 

%%~nxG gibt Ihnen die Ordnernamen (den Teil nach dem letzten /)

for /D /r %%G in (*.*) do (... 

Diese durchläuft jeder Unterordner

+0

Sie brauchen den "% CD%" -Teil nicht, da 'for/R' das aktuelle Verzeichnis trotzdem als root verwendet (oder Sie geben stattdessen explizit das root-Verzeichnis an). Ich empfehle dringend, "/ I" zu "if" hinzuzufügen, da Windows dir./file paths/names Groß-/Kleinschreibung egal verhält; Verwenden Sie außerdem Anführungszeichen wie 'if/I" %% ~ nxG "==" textures "', um zu vermeiden, dass Leerzeichen oder andere Zeichen Probleme verursachen. Schließlich denke ich, dass Sie den vollständigen Pfad zur Quelldatei 'water.dds' bereitstellen müssen ... – aschipfl

+0

Danke @aschipfl, bearbeitet :). Es benötigt nicht den vollständigen Pfad zur Datei water.dds, da sich die Datei in dem Verzeichnis befindet, in dem die Stapeldatei ausgeführt wird. – Tecnogirl

+0

Großartig! Beachten Sie, dass das aktuelle Arbeitsverzeichnis nicht mit dem übergeordneten Verzeichnis des Stapelscript identisch ist. '% CD%' verweist auf das aktuelle Arbeitsverzeichnis, wobei '% ~ dp0.' auf den Pfad-Datei-Container zeigt ... – aschipfl

Verwandte Themen