xcopy: mover arquivos em vez de copiar?


11

Eu gostaria de usar xcopypara mover, não copiar arquivos em uma rede com o sinalizador Verificar. Não foi possível encontrar uma opção no xcopy para mover arquivos, existe algum que xmoveeu possa usar verify?

No momento, estou usando, xcopy /D /Vmas preciso me livrar dos arquivos na fonte somente quando é verificado que um arquivo foi copiado com êxito para o destino.


11
Você deve estar ciente de que mesmo o uso /vnão garante que um arquivo tenha sido gravado corretamente: caches de disco e SO significam que um arquivo em um cache de gravação será recuperado a partir daí antes de ser confirmado com êxito. A única opção segura é fazer uma cópia e agendar uma verificação e exclusão em um momento futuro. Heuristicamente, diria que 5 minutos seriam suficientes, mas não existe uma regra rígida: depende da atividade do disco e do tamanho dos caches (falo como alguém que encontrou falhas de gravação em cache).
AFH

Respostas:


11

Você deve conferir robocopy, é muito mais poderoso que xcopy. Você pode facilmente mover arquivos com /MOVou /MOVE.

Para mover apenas arquivos (excluir da fonte após copiar)

robocopy from_folder to_folder files_to_copy /MOV

Para mover arquivos e diretórios (exclua da fonte após copiar)

robocopy from_folder to_folder files_to_copy /MOVE

http://ss64.com/nt/robocopy.html


2
Robocopy não tem um verifytanto quanto eu posso ver.
precisa saber é o seguinte

@JBurace Se você olhar para o link que eu postei ele afirma: /MOVE : Move files and dirs (delete from source after copying). Se não copiar, não removerá a fonte.
imtheman

2
O que acontece se for movido, mas o tamanho do arquivo não corresponder? É por isso que eu preciso fazer a verify. Não vejo nada nas informações de robocopy que realmente verifique os dois tamanhos de arquivo para garantir que não foi apenas movido, mas movido corretamente.
JBurace

@JBurace Eu não acho que funciona assim. Se ele não copiar todo o arquivo, ele funcionará como se nada tivesse sido copiado e, portanto, não removerá a fonte.
imtheman

1

Você pode usar um arquivo em lotes para executar seu Xcopycomando com a verificação, seguida de uma verificação do nível de erro retornado pelo Xcopy para determinar se os arquivos foram copiados com êxito ou não. Se sim, exclua a fonte.

Na documentação do Xcopy :

Exit
code  Description
====  ===========
  0   Files were copied without error.
  1   No files were found to copy.
  2   The user pressed CTRL+C to terminate xcopy.
  4   Initialization error occurred. There is not
      enough memory or disk space, or you entered
      an invalid drive name or invalid syntax on
      the command line.
  5   Disk write error occurred.

Lote de exemplo:

Rem Attempt file copy...
xcopy /D /V %1 %2

Rem Check result code and if it was successful (0), delete the source.
if errorlevel 0 (
    echo Copy completed successfully
    del /Q %1
    exit /B
)

Rem Not Errorlevel 0...
echo Copy failed for some reason.

Será que errorlevelainda trabalho, se eu estou fazendo: dir args && xcopy args >> logfile.txt? Ou será o errorlevelresultado de dir?
precisa saber é o seguinte

Ele conterá o resultado da última execução do comando. Você pode testá-lo com um arquivo em lotes simples, como tal: pastebin.com/6GwNA7MP
Ƭᴇcʜιᴇ007 21/21

if errorlevel 0SEMPRE dispara. Como está realmente procurando, if errorlevel >= 0verifique o caso de erro if errorlevel 1 ( ... failure case ... ) else ( ... success case ... ). Ou, se você preferir o estilo if not errorlevel 0 (... success case ... )ou, se você preferir o estiloif %ERRORLEVEL% EQU 0 ( ... success case ... )
Jesse Chisholm

Claro que isso seria muito menos eficiente (movimento é super barato no mesmo disco rígido) ...
Ohad Schneider
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.