ver - ¿Cómo escribo un script por lotes de Windows para copiar el archivo más nuevo desde un directorio?
mostrar mensaje en pantalla cmd (8)
@Chris Noe
Tenga en cuenta que el espacio delante de & se convierte en parte del comando 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.
Ej. FOR /F %%I IN (''DIR "*.*" /B /O:D'') DO (SET NewestFile=%%I)
Necesito copiar el archivo más reciente en un directorio a una nueva ubicación. Hasta ahora he encontrado recursos en el comando forfiles , una pregunta relacionada con la fecha aquí y otra pregunta relacionada . ¡Solo estoy teniendo problemas para juntar las piezas! ¿Cómo copio el archivo más nuevo en ese directorio a un lugar nuevo?
Esto abrirá una segunda ventana 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
Intento:
find -type f -printf "%T@ %p /n" /
| sort /
| tail -n 1 /
| sed -r "s/^/S+/s//;s//s*$//" /
| xargs -iSTR cp STR newestfile
donde "newestfile" se convertirá en el archivo más reciente
alternativamente, podrías hacer newdir / STR o simplemente newdir
Descompostura:
- enumere todos los archivos en el formato {time} {file}.
- ordenarlos por tiempo
- obtener el último
- cortar el tiempo, y espacios en blanco desde el principio / final
- copiar el valor resultante
Importante
Después de ejecutar esto una vez, el archivo más nuevo será lo que acaba de copiar: p (suponiendo que ambos estén en el mismo ámbito de búsqueda). Por lo tanto, quizás deba ajustar qué número de archivo copiará si desea que esto funcione más de una vez.
La respuesta aceptada proporciona un ejemplo del uso del archivo más nuevo en un comando y luego salir. Si necesita hacer esto en un archivo bat con otras operaciones complejas, puede usar lo siguiente para almacenar el nombre del archivo más nuevo en una variable:
FOR /F "delims=|" %%I IN (''DIR "*.*" /B /O:D'') DO SET NewestFile=%%I
Ahora puede hacer referencia al% NewestFile% en el resto de su archivo bat.
Por ejemplo, esto es lo que utilizamos para obtener la última versión de un archivo .bak de base de datos de un directorio, copiarlo en un servidor y luego restaurar el archivo 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"
Para permitir que esto funcione con nombres de archivo usando 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
Sé que preguntaste por Windows pero pensé que agregaría esto de todos modos, en Unix / Linux podrías hacer:
cp `ls -t1 | head -1` /somedir/
Que listará todos los archivos en el directorio actual ordenados por tiempo de modificación y luego cp el más reciente para / somedir /
Shell de Windows, un trazador de líneas:
FOR /F %%I IN (''DIR *.* /B /O:-D'') DO COPY %%I <<NewDir>> & EXIT
@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 nuevo de una carpeta
simplemente configure sus carpetas de origen y destino, y debería funcionar
Este ignora las carpetas, solo se preocupa de los archivos
Se recomienda que elija el tipo de archivo en la ruta DIR cambiando *.*
*.zip
por ejemplo
TIMEOUT no funcionará en winXP, creo