Copiar y mover archivos por lotes sin sobrescribir

Copiar y mover archivos por lotes sin sobrescribir

Estoy intentando crear un archivo por lotes (para ejecutar en segundo plano) que copiará un solo archivo sin sobrescribir ningún archivo en el destino con el mismo nombre, y luego moverá el archivo, nuevamente sin sobrescribir si hay un archivo en el destino con el mismo nombre?

Estoy usando esto en este momento, pero se está sobrescribiendo.

copy %1 dest
move %1 dest

Respuesta1

Por favor intenta esto. Funciona para un solo archivo.

eco SUST. copiar /-Y archivo1 archivo2

eco SUST. mover /-Y archivo1 archivo2

Curiosamente, parece funcionar también con comodines. Lo probé en x64 Windows 7.

Respuesta2

No tengo claro lo que quiere decir con mover el mismo archivo que se acaba de copiar, pero para probar si existe un archivo, utilice una declaración "IF" en un script por lotes como el siguiente. (Explico con más detalle sobre %~ más abajo.)

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

Lo siguiente funcionará en Windows 7, Windows 8, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012.

(Para XP tendrás que obtenerlo del kit de recursos, pero no, solo le quedan 30 días de vida a esa gema :))

El siguiente código copia un archivo del directorio de origen al directorio de destino solo si el archivo de destino no existe.

robocopy source_path dest_path filename /XN /XO

Y agregar /MOV moverá el archivo.

Si desea utilizar parámetros, el comando sería algo como esto:

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

Con copyscript.bat luciendo así:

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

Si desea enviar la salida a un registro, agregue >>logfile.txt así:

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

Si desea mover el archivo en lugar de copiarlo, haga lo siguiente:

robocopy %~dp1 %~dp2 %~nx1 /XN /XO /MOV 
  • %~dp1 equivale al directorio y ruta del primer parámetro
  • %~dp2 equivale al directorio y ruta del segundo parámetro
  • %~nx1 equivale al nombre del archivo y la extensión del primer parámetro
  • /XN excluye archivos más nuevos durante la copia
  • /XO excluye archivos más antiguos durante la copia
  • /MOV MUEVE el archivo en lugar de simplemente copiarlo
  • agrega los resultados de salida a un archivo en lugar de a la ventana cmd (use solo uno > si desea sobrescribir el registro cada vez)

  • De forma predeterminada, robocopy no sobrescribe el archivo si las marcas de fecha y hora son las mismas.

El sitio de Simon Sheppard es un buen recurso de secuencias de comandos por lotes; la sintaxis de los argumentos está aquí. http://ss64.com/nt/syntax-args.html

La información sobre robocopia de Microsoft está aquíhttp://technet.microsoft.com/en-us/library/cc733145.aspx

información relacionada