batch file - programming - Archivo por lotes para copiar archivos de una carpeta a otra.
learn batch file programming (8)
Es posible que desee echar un vistazo a XCopy o http://technet.microsoft.com/en-us/library/cc733145.aspx que son soluciones bastante completas para casi todas las operaciones de copia de archivos en Windows.
Tengo una carpeta de almacenamiento en una red en la que todos los usuarios almacenarán sus datos activos en un servidor. Ahora ese servidor será reemplazado por uno nuevo debido a un problema de ubicación, por lo que debo copiar los archivos de las subcarpetas de la carpeta de almacenamiento del servidor anterior a la nueva carpeta de almacenamiento del servidor. Tengo a continuación ex:
de / Oldeserver / storage / data & files a / New server / storage / data & files.
Mi favorito para respaldar datos es:
ROBOCOPY "C:/folder" "C:/new_folder" /mir
/ mir es para espejo. También puedes usar / mov para mover archivos. Reproduce exactamente la misma carpeta. Puede eliminar / sobrescribir archivos según sea necesario. Funciona muy bien para mí. Es más rápido que xcopy / copy. Está construido en Windows también.
Fuente: http://technet.microsoft.com/en-us/library/cc733145.aspx
Mira la herramienta de Windows basada en rsync
NASBackup . Será una ventaja si está familiarizado con los comandos rsync.
Para omitir el ''especificar un nombre de archivo o nombre de directorio en el destino (F = archivo, D = directorio)?'' con xcopy, puedes hacer lo siguiente ...
echo f | xcopy /f /y srcfile destfile
o para aquellos de nosotros que simplemente copiamos grandes subestructuras / carpetas:
use / i que especifica que el destino debe ser un directorio si se copia más de un archivo
Para que quede claro, cuando use xcopy /sc:/source d:/target
, coloque "" alrededor de c: / source y d: / target, de lo contrario obtendrá un error.
es decir, si hay espacios en la ruta, es decir, si tiene:
"C:/Some Folder/*.txt"
pero no es obligatorio si tiene:
C:/SomeFolder/*.txt
Si desea copiar el archivo que no utiliza la ruta absoluta, en otras palabras, la ruta relativa:
No te olvides de escribir antislash en la ruta Y NO barra (^^)
ejemplo:
copy children-folder/file.something ./other-children-folder
PS: se puede recuperar la ruta absoluta utilizando estos comodines denominados "parámetros de lote"
@echo off
echo %%~dp0 is "%~dp0"
echo %%0 is "%0"
echo %%~dpnx0 is "%~dpnx0"
echo %%~f1 is "%~f1"
echo %%~dp0%%~1 is "%~dp0%~1"
Consulte la documentación aquí sobre la copia: https://technet.microsoft.com/en-us/library/bb490886.aspx
y también aquí para la documentación de los parámetros por lotes: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true
xcopy.exe es definitivamente tu amigo aquí. Está integrado en Windows, por lo que su costo no es nada.
Solo xcopy /sc:/source d:/target
Probablemente quieras retocar algunas cosas; Algunas de las opciones que también agregamos incluyen estas:
-
/s/e
- copia recursiva, incluida la copia de directorios vacíos. -
/v
- agregue esto para verificar la copia contra el original. Más lento, pero para los paranoicos. -
/h
- sistema de copia y archivos ocultos. -
/k
- copia los atributos de solo lectura junto con los archivos. de lo contrario, todos los archivos se convierten en lectura-escritura. -
/x
: si le interesan los permisos, es posible que desee/o
o/x
. -
/y
: no se solicita antes de sobrescribir los archivos existentes. -
/z
: si cree que la copia puede fallar y desea reiniciarla, use esto. Coloca un marcador en cada archivo a medida que se copia, por lo que puede volver a ejecutar el comando xcopy para continuar desde donde lo dejó.
Si cree que xcopy puede fallar a la mitad (como cuando está copiando a través de una conexión de red inestable), o si tiene que detenerlo y desea continuar más tarde, puede usar xcopy /s/zc:/source d:/target
Espero que esto ayude.
@echo off
rem The * at the end of the destination file is to avoid File/Directory Internal Question.
rem You can do this for each especific file. (Make sure you already have permissions to the path)
xcopy /Y "//Oldeserver/storage/data/MyFile01.txt" "//New server/storage/data/MyFile01.txt"*
pause
rem You can use "copy" instead of "xcopy "for this example.