Parece que no puedo encontrar una manera en la línea de comando para decir "copie todos los archivos del directorio A al directorio B, pero si el archivo ya existe en el directorio B, no lo sobrescriba, no importa qué archivo sea más nuevo y no me preguntes ".
He pasado por copiar, mover, xcopy y robocopy, y lo más cercano que puedo conseguir es que puede decirle a robocopy "copiar A a B, pero no sobrescribir archivos más nuevos con archivos más antiguos", pero eso no me funciona . Miré xxcopy, pero lo descarté, ya que no quiero tener una dependencia de terceros en un evento posterior a la compilación de Visual Studio que requiera que otros usuarios de SVN tengan instalada esa herramienta para realizar la compilación.
Quiero agregar una línea de comando al evento posterior a la compilación en Visual Studio 2010 para que los archivos que se generan a partir de las plantillas T4 para los nuevos objetos del modelo EF se distribuyan a las carpetas del proyecto a las que pertenecen, pero los archivos regenerados para los objetos existentes. no sobrescriba los archivos de destino potencialmente editados.
Dado que la plantilla T4 se regenera, el archivo fuente es siempre más nuevo y no creo que pueda usar el modificador "más nuevo" de manera confiable.
Utilizo clases parciales para aquellos elementos para los que puedo, pero hay otras cosas que genero que no pueden usar clases parciales (por ejemplo, generar un archivo EditorTemplate o DisplayTemplate * .ascx predeterminado).
¿Alguien tiene algún problema similar que haya resuelto?
fuente
cmd.exe
elfor
comando de? Si no es así, le recomiendo que lo ejecutefor /?
y lo use.Respuestas:
fuente
~nx
en%~nxF
decir exactamente?~nxF
la variable seF
convierte en un nombre de archivo y una extensión.Para elaborar (usando Hydrargyrum, HailGallaxar y Andy Schmidt responde):
/E
hace que Robocopy copie subdirectorios de forma recursiva, incluidos los vacíos./XC
excluye los archivos existentes con la misma marca de tiempo, pero de diferentes tamaños. Robocopy normalmente los sobrescribe./XN
excluye los archivos existentes más nuevos que la copia en el directorio de destino. Robocopy normalmente los sobrescribe./XO
excluye los archivos existentes más antiguos que la copia en el directorio de destino. Robocopy normalmente los sobrescribe.Con las clases cambiadas, antiguas y nuevas excluidas, Robocopy hace exactamente lo que quiere el póster original, sin necesidad de cargar un entorno de secuencias de comandos.
Referencias: Technet , Wikipedia
Descarga de: Enlace de descarga de Microsoft (enlace verificado por última vez el 30 de marzo de 2016)
fuente
/e
? ¿Y si usa/s
en su lugar? No quiero un montón de subcarpetas vacías.La solución de Belisarius es buena.
Para desarrollar esa respuesta ligeramente concisa:
/E
hace que Robocopy copie subdirectorios de forma recursiva, incluidos los vacíos./XC
excluye los archivos existentes con la misma marca de tiempo, pero de diferentes tamaños. Robocopy normalmente los sobrescribe./XN
excluye los archivos existentes más nuevos que la copia en el directorio de origen. Robocopy normalmente los sobrescribe./XO
excluye los archivos existentes más antiguos que la copia en el directorio de origen. Robocopy normalmente los sobrescribe.Con las clases cambiadas, antiguas y nuevas excluidas, Robocopy hace exactamente lo que quiere el póster original, sin necesidad de cargar un entorno de secuencias de comandos.
fuente
Puedes probar esto:
-y
simplemente solicita antes de sobrescribir y podemos canalizar n a todas esas preguntas. Entonces, esto, en esencia, solo copiaría archivos no existentes. :)fuente
copy /-y
asume automáticamente No una vez que stdin se queda sin entrada. Puede omitir el primer explíciton
o canalizarlo< nul
, y sucede lo mismo.Aquí está en forma de archivo por lotes:
fuente
Solo quiero aclarar algo de mis propias pruebas.
@Hydrargyrum escribió:
En realidad, esto es al revés. XN "eXcluye los archivos más nuevos" pero excluye los archivos que son más nuevos que la copia en el directorio de destino . XO "eXcluye los más antiguos", pero excluye los archivos que son más antiguos que la copia en el directorio de destino .
Por supuesto, haz tus propias pruebas como siempre.
fuente
Hay una forma extraña de hacer esto con xcopy:
Simplemente incluya tantos n como archivos que esté copiando, y responderá n a todas las preguntas de sobrescritura.
fuente
copy
, vea esta respuesta , específicamente el comentario de @mwfearnley:copy /-y
se asume automáticamenten
una vez que stdin se agota, por lo que puede, por ejemplo,echo n
solo una vez y aún funciona./ XX: Excluir archivos y directorios "eXtra" (presentes en el destino pero no en la fuente). Esto evitará cualquier eliminación del destino. (este es el predeterminado)
fuente
Robocopy se puede descargar aquí para sistemas donde aún no está instalado. (Es decir, Windows Server 2003.)
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17657 (no es necesario reiniciar para la instalación)
Recuerde establecer su ruta al exe robocopy. Haga esto haciendo clic derecho en "mi computadora"> propiedades> avanzado> "Variables de entorno", luego busque la variable de sistema de ruta y agregue esto al final: "; C: \ Archivos de programa \ Kits de recursos de Windows \ Herramientas" o donde sea que lo instaló. Asegúrese de dejar las cadenas de variables de ruta que ya están allí y simplemente agregue la ruta adicional.
una vez que se establece la ruta, puede ejecutar el comando que sugiere belisarius. Funciona muy bien.
fuente
No me permitirá comentar directamente sobre los mensajes incorrectos, pero permítanme advertirles a todos que la definición de las opciones / XN y / XO está INVERTIDA en comparación con lo que se ha publicado en mensajes anteriores.
La opción Excluir archivos más antiguos / más nuevos es coherente con la información que se muestra en el registro de RoboCopy: RoboCopy iterará a través de la FUENTE y luego informará si cada archivo en la FUENTE es "MÁS VIEJO" o "MÁS NUEVO" que el archivo en el destino.
En consecuencia, / XO excluirá los archivos de ORIGEN ANTIGUO (que es intuitivo), no "más antiguos que el origen" como se ha afirmado aquí.
Si desea copiar solo archivos de origen nuevos o modificados, pero evitar reemplazar archivos de destino más recientes, entonces / XO es la opción correcta para usar.
fuente
Un enfoque simple sería usar la opción / MIR para reflejar los dos directorios. Básicamente, copiará solo los archivos nuevos al destino. En el siguiente comando y reemplace la fuente y el destino con las rutas a sus carpetas, el script buscará cualquier archivo con cualquier extensión.
fuente
Esto es lo que me ha funcionado. Utilizo esto para "agregar" archivos a la otra unidad, sin sobrescribirlos.
Archivo por lotes: robocopy-missingfiles.bat
Ejemplo:
Pruebe antes de la implementación.
fuente