Necesito copiar el archivo más reciente en un directorio a una nueva ubicación. Hasta ahora he encontrado recursos en el comando forfiles, un date-related question aquí y otro related question. ¡Solo estoy teniendo problemas para juntar las piezas! ¿Cómo copio el archivo más nuevo en ese directorio a un lugar nuevo?¿Cómo escribo un script por lotes de Windows para copiar el archivo más reciente desde un directorio?
Respuesta
shell de Windows, un trazador de líneas:
FOR /F %%I IN ('DIR *.* /B /O:-D') DO COPY %%I <<NewDir>> & EXIT
Sé que pidió para Windows, pero que me gustaría añadir esto de todos modos, en Unix/Linux que podría hacer:
cp `ls -t1 | head -1` /somedir/
el que figurarán todos los archivos en el directorio actual ordenados por fecha de modificación y luego cp el más reciente para/somedir/
No esperaba esta respuesta en esta publicación. Muchas gracias. – Mrk
Esto abrirá una segunda ventana de cmd.exe. Si desea que desaparezca, reemplace/K con/C.
Obviamente, reemplace new_file_loc con la ubicación de su nuevo archivo.
@echo off
for /F %%i in ('dir /B /O:-D *.txt') do (
call :open "%%i"
exit /B 0
)
:open
start "window title" "cmd /K copy %~1 new_file_loc"
exit /B 0
Bash:
find -type f -printf "%[email protected] %p \n" \
| sort \
| tail -n 1 \
| sed -r "s/^\S+\s//;s/\s*$//" \
| xargs -iSTR cp STR newestfile
donde "newestfile" se convertirá en el newestfile
, alternativamente, se podría hacer newdir/STR o simplemente newdir
Desglose:
- enumera todos los archivos en {time} {file} formato.
- ordenarlos por el tiempo
- obtener el último
- cortó el tiempo y el espacio en blanco desde el principio/final
- copia resultante valor
Importante
Después de ejecutar esta vez, el archivo más nuevo será lo que acaba de copiar: p (suponiendo que ambos estén en el mismo alcance de búsqueda). Así que es posible que deba ajustar qué número de archivo copiará si desea que funcione más de una vez.
la respuesta aceptada da un ejemplo de uso del archivo más reciente en un comando y después de salir. Si necesita hacer esto en un archivo bat con otras operaciones complejas se puede utilizar el siguiente para almacenar el nombre de archivo del archivo más reciente en una variable:
FOR /F "delims=|" %%I IN ('DIR "*.*" /B /O:D') DO SET NewestFile=%%I
Ahora puede hacer referencia% NewestFile% en el resto de tu archivo de murciélago
Por ejemplo, esto es lo que utilizamos para obtener la última versión de una base de datos.bak de un directorio, copiarlo en un servidor, y luego restaurar la db:
:Variables
SET DatabaseBackupPath=\\virtualserver1\Database Backups
echo.
echo Restore WebServer Database
FOR /F "delims=|" %%I IN ('DIR "%DatabaseBackupPath%\WebServer\*.bak" /B /O:D') DO SET NewestFile=%%I
copy "%DatabaseBackupPath%\WebServer\%NewestFile%" "D:\"
sqlcmd -U <username> -P <password> -d master -Q^
"RESTORE DATABASE [ExampleDatabaseName]^
FROM DISK = N'D:\%NewestFile%'^
WITH FILE = 1,^
MOVE N'Example_CS' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Example.mdf',^
MOVE N'Example_CS_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Example_1.LDF',^
NOUNLOAD, STATS = 10"
Excelente ... Estaba buscando cómo obtener el archivo más reciente, y el ejemplo del código que da es la razón exacta por la que estoy buscando este , restaurando una copia de seguridad de servidor sql! – tbone
Su bienvenida, me alegro de poder ayudar =). –
Esto fue útil. Solo una nota para decir, si sus archivos están inoportunamente en subdirectorios (como el mío), puede usar el indicador '/ S' en DIR para verificar recursivamente. es decir, inserte '/ S' después del DIR anterior y debería funcionar. –
Para permitir que esto funcione con nombres de archivo utilizando espacios, se necesita una versión modificada de la respuesta aceptada:
FOR /F "delims=" %%I IN ('DIR . /B /O:-D') DO COPY "%%I" <<NewDir>> & GOTO :END
:END
@ Chris Noe
Tenga en cuenta que el espacio delante de la & se convierte en parte de la orden anterior. Eso me ha mordido con SET, que felizmente pone espacios en blanco en el valor.
Para desplazarse por el espacio final que se agrega a una variable de entorno, ajuste el comando set en parens.
E.g. FOR /F %%I IN ('DIR "*.*" /B /O:D') DO (SET NewestFile=%%I)
@echo off
set source="C:\test case"
set target="C:\Users\Alexander\Desktop\random folder"
FOR /F "delims=" %%I IN ('DIR %source%\*.* /A:-D /O:-D /B') DO COPY %source%\"%%I" %target% & echo %%I & GOTO :END
:END
TIMEOUT 4
Mi intento de copiar el archivo más reciente de una carpeta
acaba de establecer las carpetas de origen y de destino y debería funcionar
Ésta hace caso omiso de las carpetas, tener en cuenta únicamente los archivos
Se recomienda que elija el tipo de archivo en la ruta DIR cambiando *.*
a *.zip
por ejemplo
TIMEOUT no funciona en winXP Creo que
- 1. Cómo obtener el archivo más reciente utilizando un script por lotes en Windows
- 2. ¿Cómo escribo un script por lotes que copia un directorio a otro, reemplaza los archivos viejos?
- 3. Cómo ejecutar un script por lotes (archivo .bat) desde eclipse
- 4. ¿Cómo ejecuto un script por lotes desde un script por lotes?
- 5. Ejecutando un script por lotes en el cierre de Windows
- 6. ¿Cómo establecer el directorio de trabajo de un comando en un archivo por lotes de Windows?
- 7. ¿Cómo esperar en un script por lotes?
- 8. ¿Puedo usar Sass con un script por lotes en Windows
- 9. Incluir un archivo por lotes en un archivo por lotes
- 10. ¿Cómo concatenar cadenas en un archivo por lotes de Windows?
- 11. Cómo hacer algo a cada archivo en un directorio con un script por lotes
- 12. ¿Cómo puedo ejecutar varios scripts PHP desde un script PHP (como un archivo por lotes)?
- 13. Ejecute el archivo por lotes como un servicio de Windows
- 14. ¿Cómo ejecutar un archivo por lotes desde Java?
- 15. Invocar el archivo por lotes de Windows desde Linux
- 16. ¿Cómo incluir el carácter de tubería en un argumento a un archivo por lotes desde un script bash?
- 17. Windows script por lotes: cálculo de subcadena
- 18. Ejecutando vbscript desde el archivo por lotes
- 19. ejecutar un archivo por lotes desde C#
- 20. ¿Cómo puedo escribir un carácter ASCII nulo (nul) en un archivo con un script por lotes de Windows?
- 21. ¿Cuál es el directorio actual en un archivo por lotes?
- 22. Control de psftp en un archivo por lotes de Windows
- 23. Archivo por lotes para reiniciar un servicio. Windows
- 24. Ejecutando rake desde el archivo por lotes
- 25. Iniciar varias aplicaciones de consola desde un archivo por lotes
- 26. ¿Cómo enviar un correo electrónico simple desde un archivo por lotes de Windows?
- 27. Hacer un directorio y copiar un archivo
- 28. Buscar la carpeta más reciente en un directorio en Python
- 29. ¿Cómo ejecutar programas en el mismo directorio que el archivo por lotes de Windows?
- 30. Redirigir argumentos pasados a un archivo por lotes de Windows
Probablemente debería ser exit/by goto: eof para evitar cerrar la ventana de cmd ... – Joey
Los delimitadores predeterminados son y por lo que es mejor agregar "delims =" después de FOR/F para aceptar nombres de archivos con espacios. El comando completo será FOR/F "delims =" %% I IN ('DIR *. */B/O: -D') DO COPY %% I <> & EXIT –
Cheburek
Tenga en cuenta que el espacio delante del & se convierte parte del comando anterior. Eso me ha mordido con SET, que felizmente pone espacios en blanco en el valor. –