arquivos xcopy em diretório único


21

Eu gostaria de usar o xcopy em uma máquina Windows para extrair todos os arquivos com extensão .png em um único diretório.

Eu tentei xcopy C:\folder\*.png /s C:\png\, mas ele está mantendo os subdiretórios dentro da pasta \ (por exemplo, em C: \ png, existe C: \ png \ a \ b \ c \ img.png) que eu não quero. Eu simplesmente quero tudo .png dentro de C: \ png, sem manter a estrutura de diretórios que estava na pasta C: \.


Respostas:


39

Isso pode ser feito com bons velhos tempos for:

for /r C:\Folder %f in (*.png) do @copy "%f" C:\png

Nada chique.


Funciona! Importa-se de explicar para que %fserve?
bobobobo

É a variável de loop.
Joey

3
Isso não funcionou para mim, consegui algo para o efeito f" was unexpected at this time. Mudando %fpara %%ffuncionou. No entanto, eu estava executando isso em um arquivo em lotes: se você estiver usando o comando FOR na linha de comando, e não em um programa em lote, use apenas um sinal de porcentagem:% G em vez de %% G. ss64.com/nt/for.html
ta.speot.is

11
Hum, sim. Isso é esperado e exatamente como você citou. De onde viria sua confusão?
Joey

11
@kayleeFrye_onDeck: Até onde eu sei, não existem variáveis ​​especiais. A única coisa que vem à mente é que as pessoas não familiarizadas forpodem ficar confusas sobre as duas dcoisas diferentes %~dd. A fordocumentação sugere usar letras maiúsculas para variáveis ​​para evitar confusão, mas as substituições ainda são claramente distinguíveis do nome da variável, eu acho.
Joey

1

Se você tem o cygwin instalado, este seria um trabalho para encontrar:

cp `find /cygdrive/c/folder/* -name '*png'` /cygdrive/c/png/

(embora isso tenha problemas se algum dos nomes de arquivos tiver espaços neles - você encontrará uma variante de um findcomando que funcionará em todas as circunstâncias)

Se você estiver executando o Vista, 2003 ou 2008, os "forfiles" menos flexíveis, mas ainda úteis, são seus amigos. Algo como:

FORFILES /P c:\folder\ /M *.png /S /C "cmd /c copy @file c:\png\"

Nota: Eu não testei nenhum dos comandos acima, mas em teoria eles devem funcionar ...


+1 apenas verificou que o comando FORFILES funciona. Eu o executei duas vezes e copiei o prompt da 2ª vez sem saída, então presumo que ele substitua apenas se encontrar duplicatas.
Hyperslug 08/08/09
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.