Как рекурсивно копировать файлы с помощью командной строки Windows

Я хотел бы избежать использования командного файла, если это возможно.

Основываясь на этом ответе на вопрос о рекурсивном переименовании или перемещении, я придумал следующую команду (для копирования всех файлов с именем web.foo.config в web.config в одном каталоге):

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

Однако это просто вызвало создание каждого экземпляра web.foo.config с последующей перезаписью.\ Web.config, а не web.config в найденном пути. Итак, я попробовал:

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

К сожалению, это приводит к копированию файлов в файл с именем "%y". Есть ли способ заставить %y оценивать после того, как он установлен... или лучший метод в целом?

2 ответа

Решение

Копирование всех файлов с именем web.foo.config в web.config в том же каталоге

Поскольку вы не хотите использовать пакетный файл для этой операции, то из командной строки с повышенными привилегиями вы можете использовать приведенные ниже для выполнения этого.

Это предполагает, что каталог, в котором вы находитесь, когда вы запускаете команду из командной строки, является тем, который будет проходить через рекурсивное выполнение команды копирования найденных файлов.

Я оставил звездочку (*) с начала web.foo.config имя файла, но вы можете добавить его в случае необходимости, если действительно необходимо найти файлы с таким шаблоном именования.

Использование примера копирования

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

Использование примера Xcopy

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

Дополнительные ресурсы

  • FOR /F
  • FOR /?

    Кроме того, была улучшена замена ссылок на переменные FOR. Теперь вы можете использовать следующий необязательный синтаксис:

    %~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
    

Используйте xcopy с переключателем /S для рекурсивного копирования всех файлов и каталогов.

В любой командной строке Windows:

      xcopy *.* \destination /S

Быстро и просто.

Другие вопросы по тегам