Como mover todos os arquivos, exceto o mais novo para uma pasta?

3

Eu tenho uma caixa do Windows e uma pasta contendo esses arquivos:

2010-07-04  20:18                81 in01_Acct_20100704001.r 
2010-07-07  05:45               165 in01_Acct_20100706001.r 
2010-07-07  19:41                82 in01_Acct_20100707001.r 
2010-07-07  10:02                81 in01_Acct_20100707002.r 
2010-07-08  08:31                89 in01_Acct_20100708001.r 
2010-07-10  04:51                82 in01_Acct_20100709001.r 

e eu quero usar um lote para mover periodicamente todos esses arquivos para outra pasta, exceto a mais recente (ou seja, in01_Acct_20100709001.r), porque esse arquivo às vezes ainda está sendo gravado e movê-lo pode levar à substituição do arquivo na pasta de destino na próxima execução do lote e faz com que o conteúdo do arquivo seja perdido.

Qualquer ideia sobre este caso seria muito apreciada.

    
por suyao 13.07.2010 / 21:57

1 resposta

1

Publicando a resposta de suyao aqui:

for /F "skip=1" %f IN ('dir /TW /O-D /A-D /B') DO move %f wherever

A explicação mais simples é que o comando DIR pré-construiu a ordenação de datas.

/T (has W implied would work as well) sorts based on time Last Written
/O sets the order, -D = By Date/Time, in reverse order
/A-D only entries that are NOT directories (hence files)
/B returns simply the filename

O "skip = 1" significa que o código deve ignorar a linha mais alta retornada e, como os arquivos foram ordenados corretamente, esse seria o arquivo mais recente.

    
por 14.07.2010 / 16:34