Todos los días se generan muchos archivos en el directorio de una computadora local del usuario, con esta estructura de nombre:

8-05-21_09-05-2019_wolverine_WCALL1-010
hour_date_username_computername 

El problema: necesito un archivo por lotes para ejecutar robocopy para copiar los archivos generados solo en el día. Me gusta esto:

robocopy  09-05-2019 \\server\files\8-05-21_09-05-2019_wolverine_WCALL1-010

Entonces, ¿cómo puedo obtener la fecha en el medio del nombre del archivo?

-2
Douglas Filipe 9 may. 2019 a las 16:30

3 respuestas

La mejor respuesta

Si desea trabajar específicamente solo en el nombre, aquí hay una manera.

@echo off
set day=0
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\%~n0.vbs"
set "yyyy=%result:~0,4%"
set "mm=%result:~4,2%"
set "dd=%result:~6,2%"
set "modD=%dd%-%mm%-%yyyy%
for /f %%i in ('dir /b /a-d ^| findstr "_%modD%"') do (
    robocopy "source" "destination" %%~i
)
0
Gerhard Barnard 9 may. 2019 a las 17:39

Usando de su archivo por lotes, puede seleccionar solo archivos modificados dentro de los últimos 24 horas usando la opción /MaxAge con un valor de 1:

@RoboCopy "SourceDirectory" "DestinationDirectory" /MaxAge:1

Si necesita solo archivos modificados hoy, usted puede resultarle más sencillo realizar la tarea utilizando de su :

@PowerShell -NoP "$d=$(Get-Date).ToString('yyyyMMdd');RoboCopy "SourceDirectory" "DestinationDirectory" /MaxAge:$d"
0
Compo 9 may. 2019 a las 17:05

Obtenga la fecha de forma independiente en la configuración regional / del usuario (aquí con PowerShell)
Use comodines alrededor de la fecha para seleccionar solo los archivos que contienen esa fecha.

@Echo off
for /f %%A in ('powershell -NoP -c "get-date -f dd-MM-yyyy"') do set "dt=%%A"
RoboCopy "x:\sourcepath" "\\server\files" "*_%dt%_*"
0
user6811411user6811411 9 may. 2019 a las 17:33