¿Cómo puedo escribir un Windows script por lotes para copiar el archivo más reciente de un directorio?

StackOverflow https://stackoverflow.com/questions/97371

  •  01-07-2019
  •  | 
  •  

Pregunta

Tengo que copiar el nuevo archivo en un directorio a una nueva ubicación.Hasta ahora he encontrado recursos en el forfiles comando, un fecha de la pregunta relacionada con la aquí, y otra una pregunta relacionada con la.Solo estoy teniendo un poco de problemas para poner las piezas juntas!¿Cómo puedo copiar el nuevo archivo en ese directorio a un nuevo lugar?

¿Fue útil?

Solución

El shell de Windows, uno forro:

FOR /F %%I IN ('DIR *.* /B /O:-D') DO COPY %%I <<NewDir>> & EXIT

Otros consejos

El aceptó respuesta da un ejemplo de cómo usar el archivo más reciente en un comando y, a continuación, salir.Si usted necesita para hacer esto en un archivo bat con otras operaciones complejas puede utilizar el siguiente para almacenar el nombre de archivo del nuevo archivo en una variable:

FOR /F "delims=|" %%I IN ('DIR "*.*" /B /O:D') DO SET NewestFile=%%I

Ahora puede hacer referencia %NewestFile% durante el resto de su archivo bat.

Por ejemplo, aquí es lo que utilizamos para obtener la versión más reciente de una base de datos .bak archivo de un directorio, copiar a un servidor y, a continuación, restaurar la base de datos:

: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 con espacios, una versión modificada de la aceptación de la respuesta que se necesita:

FOR /F "delims=" %%I IN ('DIR . /B /O:-D') DO COPY "%%I" <<NewDir>> & GOTO :END
:END

@Chris Noe

Tenga en cuenta que el espacio en frente de la & se convierte en parte del comando anterior.Que ha mordido a mí con SET, que felizmente pone los espacios en blanco finales en el valor.

Para obtener alrededor de la parte final del espacio se agrega una variable de entorno, envuelva el comando set en paréntesis.

E. g. FOR /F %%I IN ('DIR "*.*" /B /O:D') DO (SET NewestFile=%%I)

Sé que usted pidió para Windows, pero pensé que me gustaría añadir esto de todos modos,en Unix/Linux se podría:

cp `ls -t1 | head -1` /somedir/

Que lista todos los archivos en el directorio actual, ordenados por fecha de modificación y, a continuación, cp, la más reciente a /somedir/

Esto abrirá un segundo cmd.exe de la ventana.Si quieren que se vaya, reemplace el /K con a /C.

Obviamente, reemplazar new_file_loc con cualquiera que sea tu nueva ubicación del archivo será.

@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
@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 nuevo archivo de una carpeta

sólo tienes que configurar la fuente y carpetas de destino y se debe trabajar

Este uno ignora carpetas, la preocupación por sí solo con los archivos

Recomiendo que usted elija el tipo de archivo en el directorio cambio de ruta *.* a *.zip por ejemplo

Tiempo de espera no funciona en winXP creo

Bash:

 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 newestfile

alternativamente, puede hacer newdir/STR o simplemente newdir

Desglose:

  1. lista de todos los archivos en {hora} {archivo} formato.
  2. ordenar por tiempo
  3. obtener la última
  4. cortar el tiempo y el espacio en blanco desde el inicio/final
  5. copia de valor resultante

Importante

Después de ejecutar esta vez, el archivo más reciente que será lo que usted acaba de copiar :p ( suponiendo que ambos están en el mismo ámbito de búsqueda que es ).Así que usted puede tener que ajustar la cual filenumber copia si quieres que esto funcione más de una vez.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top