Como recursivamente copiar arquivos usando a linha de comando do Windows

1

Gostaria de evitar o uso de um arquivo de lote, se possível.

Baseado em esta resposta a uma pergunta sobre renomeando ou movendo-se recursivamente , eu criei o seguinte comando (para copiar todos os arquivos chamados web.foo.config para web.config no mesmo diretório ) :

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

No entanto, isso apenas fez com que todas as instâncias de web.foo.config criassem e depois sobrescrevessem. \ web.config, não o web.config no caminho encontrado. Então eu tentei:

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

Isso tem o infeliz efeito de copiar os arquivos para um arquivo chamado "% y". Existe uma maneira de forçar o %y a ser avaliado após ser definido ... ou um método melhor?

    
por Mike Godin 20.01.2017 / 17:41

1 resposta

1

Copiando todos os arquivos denominados web.foo.config para web.config no mesmo diretório

Como você não deseja usar um arquivo em lotes para essa operação, em um prompt de comando elevado, é possível usar o arquivo abaixo para concluir isso.

Isto assume que o diretório em que você está quando você executa o comando a partir do prompt de comando é aquele que será percorrido recursivamente executando o comando copy dos arquivos encontrados.

Eu deixei o asterisco ( * ) do início do nome do arquivo web.foo.config , mas você pode adicionar isso quando necessário se for realmente necessário encontrar arquivos com esse padrão de nomenclatura.

Usando o exemplo de cópia

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

Usando o Xcopy Example

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

Mais recursos

  • FOR / F
  • FOR /?

    In addition, substitution of FOR variable references has been enhanced. You can now use the following optional syntax:

    %~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
    
por 20.01.2017 / 18:09