Para simplificar sua pergunta (pelo que entendi), você deseja:
- Olhe para o diretório de origem e obtenha o arquivo mais recente
- Olhe para o diretório de destino e obtenha o arquivo mais recente
- compare os carimbos de tempo desses dois arquivos
- Se o arquivo de diretório de origem (etapa 1) for mais recente que o arquivo de diretório de destino (etapa 2), copie-o para o diretório de destino.
- Se copiado, renomeie o novo arquivo no diretório de destino.
Os passos 1 e 2 podem ser realizados com um loop:
set SOURCE_SERVER=\server\source
set DEST_SERVER=C:\Destination Folder
set SOURCE_LATEST=
set DEST_LATEST=
REM Latest timestamp in the source directory
for /f "tokens=*" %%A in ('dir "%SOURCE_SERVER%\*.*" /b /o:-d') do (
if not defined SOURCE_LATEST set SOURCE_LATEST=%%~fA)
REM latest timestamp in the destination directory
for /f "tokens=*" %%A in ('dir "%DEST_SERVER%\*.*" /b /o:-d') do (
if not defined DEST_LATEST set DEST_LATEST=%%~fA)
Mais ajuda nisso: Como eu escrevo um script em lote do Windows para copiar o arquivo mais novo de um diretório?
Etapa 3 : agora você conhece o arquivo mais recente em cada local. Tempo para comparar seus timestamps para ver qual arquivo é mais novo. Podemos usar o wmic para recuperar um registro de data e hora para cada arquivo que pode ser comparado com operadores relacionais: por exemplo, 20150129113038 (o que equivale a 29 de janeiro de 2015 às 11:30:38) é maior que 20150129112533 (29 de janeiro de 2015 às 11:25:33).
set DEST_FILE_DATE=
set SOURCE_FILE_DATE=
for /f "tokens=1 skip=1 delims=." %%A in ('wmic datafile where name^="%SOURCE_LATEST:\=\%" get "Last Modified"') do (
if not defined SOURCE_FILE_DATE set SOURCE_FILE_DATE=%%A)
for /f "tokens=1 skip=1 delims=." %%A in ('wmic datafile where name^="%DEST_LATEST:\=\%" get "Last Modified"') do (
if not defined DEST_FILE_DATE set DEST_FILE_DATE=%%A)
Idéias adicionais sobre essa última comparação podem ser encontradas aqui: Como faço para comparar timestamps de arquivos em um script em lotes do DOS?
Etapas 4 e 5 : Por fim, determine se o arquivo mais recente é o que está no servidor de origem e copie + renomeie conforme necessário.
if "%SOURCE_FILE_DATE%" gtr "%DEST_FILE_DATE%" (
REM copy the source file to the destination and rename it as desired.
copy "%SOURCE_LATEST%" "%DEST_SERVER%\new file name.ext"
) else (
REM Wait 5 minutes and try again
timeout /T 300
goto :START
)