Copiar e mover arquivos em lote sem sobrescrever

1

Estou tentando criar um arquivo em lotes (para execução em segundo plano) que copie um único arquivo sem sobrescrever qualquer arquivo no destino com o mesmo nome e, em seguida, mova o arquivo, novamente não sobrescrevendo se houver arquivo no destino com o mesmo nome?

Estou usando isso no momento, mas está sobrescrevendo.

copy %1 dest
move %1 dest
    
por Aeolai 04.03.2014 / 00:16

2 respostas

2

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

echo N | copy /-Y file1 file2

echo N | move /-Y file1 file2

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

    
por 04.03.2014 / 00:34
1

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

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

Os itens a seguir funcionarão no Windows 7, no Windows 8, no Windows Server 2008, no Windows Server 2008 R2 e no Windows Server 2012.

(Para o XP, você terá que obtê-lo no Resource Kit, mas, oh, 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 procurando algo assim:

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

Se você quiser enviar a saída para um log, adicione > > logfile.txt da seguinte forma:

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 eXtension do primeiro parâmetro
  • / XN eXclui arquivos mais recentes durante a cópia
  • / XO eXclui arquivos mais antigos durante a cópia
  • / MOV MOVES o arquivo em vez de apenas copiar
  • appends output results to a file instead of the cmd window (use only one > if you want to overwrite the log each time)

  • por padrão, o robocopy não sobrescreve o arquivo se os registros de data e hora forem os mesmos.

O site do Simon Sheppard é um bom recurso de script em lote, a sintaxe dos argumentos está aqui. link

As informações de robocópia da Microsoft estão aqui link

    
por 09.03.2014 / 22:33

Tags