Copiar e mover arquivos em lote sem sobrescrever

Copiar e mover arquivos em lote sem sobrescrever

Estou tentando criar um arquivo em lote (para executar em segundo plano) que irá copiar um único arquivo sem substituir nenhum arquivo no destino com o mesmo nome e, em seguida, mover o arquivo, novamente sem sobrescrever se houver um arquivo no destino com o mesmo nome?

Estou usando isso no momento, mas está sobrescrevendo.

copy %1 dest
move %1 dest

Responder1

Por favor, tente isso. Funciona para um único arquivo.

eco N | copiar /-Y arquivo1 arquivo2

eco N | mover /-Y arquivo1 arquivo2

Curiosamente, parece funcionar também com curingas. Eu testei isso no Windows 7 x64.

Responder2

Não estou claro o que você quer dizer com mover o mesmo arquivo que acabou de ser copiado, mas para testar se existe um arquivo, use uma instrução "IF" em um script em lote como o seguinte. (Explico com mais detalhes sobre %~ mais abaixo.)

IF EXIST %~dp2%~nx1 (echo file exists) ELSE (
robocopy %~dp1 %~dp2 %~nx1 /XN /XO /MOV>>testing.txt)

O seguinte funcionará no Windows 7, Windows 8, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012.

(Para XP, você terá que obtê-lo no Kit de Recursos, mas, ah, não, restam apenas 30 dias de vida nessa joia :))

O código a seguir copia um arquivo do diretório de origem para o diretório de destino somente se o arquivo de destino não existir.

robocopy source_path dest_path filename /XN /XO

E adicionar /MOV moverá o arquivo.

Se você quiser usar parâmetros o comando seria algo assim:

copyscript.bat C:\Dir1\filename.ext D:\path2\

Com o copyscript.bat parecendo algo assim:

robocopy %~dp1 %~dp2 %~nx1 /XN /XO

Se você deseja enviar a saída para um log, adicione >>logfile.txt assim:

robocopy %~dp1 %~dp2 %~nx1 /XN /XO>>logfile.txt 

Se você quiser mover o arquivo em vez de copiá-lo, faça o seguinte:

robocopy %~dp1 %~dp2 %~nx1 /XN /XO /MOV 
  • %~dp1 equivale ao diretório e caminho do primeiro parâmetro
  • %~dp2 equivale ao diretório e caminho do segundo parâmetro
  • %~nx1 equivale ao nome do arquivo e extensão do primeiro parâmetro
  • /XN eXclui arquivos mais recentes durante a cópia
  • /XO eXclui arquivos mais antigos durante a cópia
  • /MOV Move o arquivo em vez de apenas copiar
  • anexa os resultados de saída a um arquivo em vez da janela cmd (use apenas um > se quiser sobrescrever o log a cada vez)

  • por padrão, o robocopy não substitui o arquivo se os carimbos de data e hora forem iguais.

O site de Simon Sheppard é um bom recurso de script em lote, a sintaxe dos argumentos está aqui. http://ss64.com/nt/syntax-args.html

As informações de robocópia da Microsoft estão aquihttp://technet.microsoft.com/en-us/library/cc733145.aspx

informação relacionada