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 )