Arquivo em lote para copiar arquivos de uma pasta para outra pasta

235

Eu tenho uma pasta de armazenamento em uma rede na qual todos os usuários armazenam seus dados ativos em um servidor. Agora que o servidor será substituído por um novo devido a um problema de local, é necessário copiar subpastas da pasta de armazenamento antiga do servidor para a nova pasta de armazenamento do servidor. Eu tenho abaixo ex:

de \ Oldeserver \ storage \ data & files para \ New server \ storage \ data & files.

user73628
fonte
3
Presumo que você esteja falando de um ambiente Windows?
Alan Plum
2
Os arquivos do lote
Hugo M. Zuleta
4
@ HugoM.Zuleta, estou ciente dos arquivos .bat. Mas "arquivo em lote" não está necessariamente garantindo um ambiente Windows. O uso do termo antecede o Windows (como os arquivos .bat) e eu já vi novatos usarem o termo para significar "scripts de shell" em ambientes * nix.
Alan Plum
1
@ pluma Eu concordo, e isso ocorre principalmente porque eles se referem a operações em lote realizadas pelas ferramentas de script de seus sistemas operacionais.
Hugo M. Zuleta

Respostas:

441

xcopy.exe é definitivamente seu amigo aqui. Está embutido no Windows, portanto, seu custo não é nada.

Somente xcopy /s c:\source d:\target

Você provavelmente gostaria de ajustar algumas coisas; algumas das opções que também adicionamos incluem:

  • /s/e - cópia recursiva, incluindo a cópia de diretórios vazios.
  • /v- adicione-o para verificar a cópia contra o original. mais lento, mas para os paranóicos.
  • /h - sistema de cópia e arquivos ocultos.
  • /k- copiar atributos somente leitura junto com arquivos. caso contrário, todos os arquivos se tornarão leitura / gravação.
  • /x- se você se preocupa com permissões, pode querer /oou /x.
  • /y - não avise antes de substituir os arquivos existentes.
  • /z- se você acha que a cópia pode falhar e deseja reiniciá-la, use isso. Ele coloca um marcador em cada arquivo enquanto ele copia, para que você possa executar novamente o comando xcopy para pegar de onde parou.

Se você acha que o xcopy pode falhar parcialmente (como quando você está copiando em uma conexão de rede inadequada) ou que precisa interrompê-lo e continuar mais tarde, você pode usá-lo xcopy /s/z c:\source d:\target.

Espero que isto ajude.

lavinio
fonte
2
@Iavinio Está pedindo arquivo ou diretório ao copiar um arquivo. Existe uma maneira de suprimir isso?
Bitterblue
Oi @ mini-me - descobri que, se for um diretório, você pode especificar um caractere '/' à direita e não verá essa mensagem.
587 DaveDev
2
/i- Se o destino não existir e copiar mais de um arquivo, assume que o destino deve ser um diretório.
Lavinio 5/03
1
Como copiar um único arquivo do diretório?
Charan Raju CR
10
Para contornar o prompt "arquivo ou diretório", execute o comando da seguinte maneira ... echo f | xcopy /s /f srcfile destfile
wintondeshong
56

O meu favorito para fazer backup de dados é:

ROBOCOPY "C:\folder" "C:\new_folder" /mir

/ mir é para espelho. Você também pode usar / mov para mover arquivos. Ele reproduz exatamente a mesma pasta. Ele pode excluir / substituir arquivos, conforme necessário. Funciona muito bem para mim. É mais rápido que o xcopy / copy. Também é construído no Windows.

Fonte: http://technet.microsoft.com/en-us/library/cc733145.aspx

Etienne Dupuis
fonte
2
Eu apoio isso. É realmente rápido. muito mais rápido que o xcopy
Ike
Existe uma maneira de remover recursivamente o thumbs.db semelhante a este?
drooh
54

Só para ficar claro, quando você usa xcopy /s c:\source d:\target, "" coloca ao redor de c: \ source ed: \ target, caso contrário, você recebe um erro.

ou seja, se houver espaços no caminho, ou seja, se você tiver:

"C:\Some Folder\*.txt"

mas não é necessário se você tiver:

C:\SomeFolder\*.txt
Ike
fonte
1
As aspas fizeram o truque;) obrigado também usei / Y para substituir o arquivo, se existir :) Exemplo: ´´´xcopy / s "c: \ source" "d: \ target" / Y```
Joel Carneiro
18

Você pode dar uma olhada no XCopy ou no RoboCopy, que são soluções bastante abrangentes para quase todas as operações de cópia de arquivos no Windows.

Joey
fonte
3
O RoboCopy parece ser melhor que o XCopy porque o xcopy solicita decisões de arquivo ou pasta. E eu não posso recusar. DEVE poder trabalhar totalmente automático.
Bitterblue
@ mini-me Eu sei que é muito tarde, no entanto, não consigo encontrar a mesma opção relevante. Acabei recorrendo a criar um arquivo em branco com o mesmo nome para o qual estou copiando e depois o sobrescrevi. Se o arquivo já existir, ele não se preocupará em perguntar se é um arquivo ou diretório. (Se você quiser o diretório automático, poderá acrescentar um '/' ao caminho e ele fará isso). Espero que isso ajude as pessoas do futuro!
Tom C
2
@ Eve Para referência, echo f | xcopy source destination /yserá automática. Ele atribui a todas as perguntas um "f" como resposta. Ele também passará por solicitações de substituição (f é tomado como sim, eu acho).
Ndm13 9/06/2014
14

Para ignorar o 'especificar um nome de arquivo ou diretório no destino (F = arquivo, D = diretório)?' Com o xcopy, você pode fazer o seguinte ...

echo f | xcopy /f /y srcfile destfile

ou para aqueles de nós apenas copiando grandes subestruturas / pastas:

use / i que especifica o destino deve ser um diretório se copiar mais de um arquivo

wintondeshong
fonte
(echo "f" para arquivos ou "D" para diretórios)
JinSnow
tentando fazer isso agora e não está funcionando - sempre recebo avisos ao tentar copiar um arquivo para outro diretório. Usando o Win 10, se isso afeta tudo echo f | xcopy / f / y "My.dll" "C: \ minha Pasta \ My.dll". Eu tentei com uma combinação de outros switches sem sucesso (e maiúsculas F)
Prof
3

se você deseja copiar o arquivo que não usa o caminho absoluto, caminho relativo em outras palavras:

não esqueça de escrever barra invertida no caminho E NÃO barra

exemplo:

    copy children-folder\file.something .\other-children-folder

PS: o caminho absoluto pode ser recuperado usando esses curingas chamados "parâmetros de lote"

    @echo off
    echo %%~dp0 is "%~dp0"
    echo %%0 is "%0"
    echo %%~dpnx0 is "%~dpnx0"
    echo %%~f1 is "%~f1"
    echo %%~dp0%%~1 is "%~dp0%~1"

verifique a documentação aqui sobre a cópia: https://technet.microsoft.com/en-us/library/bb490886.aspx

e também aqui para documentação dos parâmetros em lote: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true

marcdahan
fonte
Eu acho que \ é chamado de barra invertida.
Leon Bohmann
2
@echo off

rem The * at the end of the destination file is to avoid File/Directory Internal Question.

rem You can do this for each especific file. (Make sure you already have permissions to the path)
xcopy /Y "\\Oldeserver\storage\data\MyFile01.txt" "\\New server\storage\data\MyFile01.txt"*
pause

rem You can use "copy" instead of "xcopy "for this example.
David Castro
fonte
0

Veja a rsyncferramenta NASBackup do Windows . Será um bônus se você estiver familiarizado com os comandos rsync.

nik
fonte