![Copiar e mover arquivos em lote sem sobrescrever](https://rvso.com/image/1400013/Copiar%20e%20mover%20arquivos%20em%20lote%20sem%20sobrescrever.png)
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