So kopieren Sie Dateien rekursiv über die Windows-Befehlszeile

2494
Mike Godin

Ich möchte möglichst keine Batch-Datei verwenden.

Basierend auf dieser Antwort auf eine Frage zum rekursiven Umbenennen oder Verschieben habe ich den folgenden Befehl gefunden (zum Kopieren aller Dateien mit dem Namen web.foo.config in web.config in demselben Verzeichnis ):

for /r %x in (*web.foo.config) do copy /y "%x" web.config 

Dies hat jedoch nur dazu geführt, dass jede Instanz von web.foo.config. \ Web.config erstellt und dann überschrieben hat, nicht die web.config im gefundenen Pfad. Also habe ich versucht:

for /r %x in (*web.foo.config) do (SET y=%x:foo.config=config% && CALL copy /y "%x" "%y") 

Dies hat den unglücklichen Effekt, dass die Dateien in eine Datei mit dem Namen "% y" kopiert werden. Gibt es eine Möglichkeit zu erzwingen %y, um ausgewertet zu werden, nachdem sie festgelegt wurde ... oder eine insgesamt bessere Methode?

1

1 Antwort auf die Frage

1
Pimp Juice IT

Kopieren Sie alle Dateien mit dem Namen web.foo.config in die Datei web.config im selben Verzeichnis

Da Sie für diesen Vorgang keine Batchdatei verwenden möchten, können Sie dies an einer Eingabeaufforderung mit erhöhten Rechten ausführen.

Dies setzt voraus, dass das Verzeichnis, in dem Sie sich befinden, wenn Sie den Befehl an der Eingabeaufforderung ausführen, das Verzeichnis ist, durch das rekursiv der Kopierbefehl der gefundenen Dateien ausgeführt wird.

Ich habe das Sternchen ( *) vom Anfang des web.foo.configDateinamens gelassen, aber Sie können das bei Bedarf hinzufügen, wenn Sie wirklich Dateien mit diesem Namensmuster suchen müssen.

Copy-Beispiel verwenden

FOR /F "TOKENS=*" %F IN ('DIR /B /S web.foo.config') DO COPY /Y "%~F" "%~DPFweb.config" 

Xcopy-Beispiel verwenden

FOR /F "TOKENS=*" %F IN ('DIR /B /S web.foo.config') DO ECHO F | XCOPY /Y /F "%~F" "%~DPFweb.config" 

Weitere Ressourcen

  • FOR / F
  • FOR /?

    Darüber hinaus wurde die Ersetzung von FOR-Variablenreferenzen verbessert. Sie können jetzt die folgende optionale Syntax verwenden:

    %~I - expands %I removing any surrounding quotes (") %~fI - expands %I to a fully qualified path name %~dI - expands %I to a drive letter only %~pI - expands %I to a path only %~nI - expands %I to a file name only %~xI - expands %I to a file extension only %~sI - expanded path contains short names only %~aI - expands %I to file attributes of file %~tI - expands %I to date/time of file %~zI - expands %I to size of file %~$PATH:I - searches the directories listed in the PATH environment variable and expands %I to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty string 
Vielen Dank, viel besser als die Lösung, die ich gerade posten wollte: FOR / R% x IN (* web.foo.config) DO FOR / F "delims =." % y IN ("% x") DO COPY / Y "% x" "% y.config" `, die funktioniert, solange der Pfad keine Punkte enthält. Mike Godin vor 7 Jahren 2