Pergunta

Estou tentando comparar uma lista de arquivos com um arquivo de controle no carimbo de data/hora modificado usando

dir /b /tw /od controlfile olderfile | more +1

isso deve retornar o controlfile como a data modificada em olderfile é mais cedo do que controlfile.No entanto, parece estar comparando a data de criação (olderfilea data de criação é posterior controlfile's) e assim sempre retornará olderfile.O /tw interruptor deve dizer dir para usar a última data escrita (de dir /?) então não tenho certeza do que estou fazendo de errado se quiser que /tw funcione conforme documentado?

:ATUALIZAR:

Até agora eu tive olderfile em uma subpasta relativa a controlfile.Quando eu copiei olderfile para o mesmo diretório que controlfile a comparação funcionou conforme o esperado - ou seja,o comando acima retornou controlfile.Portanto, estar em uma subpasta obviamente quebra a comparação (mesmo quando a data de modificação da subpasta é semelhante à de olderfileé em si anterior ao de controlfile).

Então, minha pergunta agora é como solucionar isso, visto que a estrutura de diretórios é necessária?

Foi útil?

Solução

Primeiro, uma explicação de por que seu código está falhando.

Olhando para DIR sem a opção /B, ele sempre exibe o caminho do arquivo como uma linha de cabeçalho, nunca junto com o nome do arquivo.Ao usar a opção de classificação junto com 2 especificações de arquivo no mesmo diretório, o comando é capaz de classificar os arquivos e exibi-los no mesmo cabeçalho de diretório.Mesmo que o nome do arquivo seja repetido, você sabe exatamente a qual arquivo o cabeçalho está se referindo.

Mas se as duas especificações do arquivo estiverem em caminhos diferentes, há uma chance de que o nome do arquivo seja o mesmo e apenas os caminhos sejam diferentes.Neste caso, a classificação não funciona, a menos que cada especificação de arquivo seja classificada em seu próprio cabeçalho;caso contrário, você não saberia qual arquivo era qual.Não faz muito sentido classificar um único arquivo, mas lembre-se de que a especificação do arquivo pode incluir curingas, por isso faz sentido.Portanto, sempre que a opção de classificação for combinada com várias especificações de arquivo usando caminhos diferentes, o DIR fará uma classificação separada para cada caminho, cada um com seu próprio cabeçalho.

Adicionar a opção /B remove os cabeçalhos do caminho, mas não altera o comportamento da classificação!Absolutamente um design bobo e inútil, mas é isso que você obtém.

Chegar a uma solução é muito mais problemático, especialmente se você quiser usar lote puro apenas com comandos nativos do Windows.Trabalhar com datas pode ser irritante em lote.

A solução em lote mais conveniente que posso encontrar é copiar temporariamente o segundo arquivo no diretório pai, executar sua comparação no diretório pai e, em seguida, excluir a cópia temporária.Mas isso pode ser um problema se o arquivo for grande.Ele também assume que o nome do arquivo ainda não existe no diretório pai.Se existir (ou existir), você poderá copiar o arquivo para um nome diferente, conhecido por ser exclusivo.É claro que você teria que traduzir o resultado.

Pelo que sei, qualquer outra solução em lote exigirá a análise de data e hora.Isso abre uma lata inteira de vermes.(É factível)

Se a sugestão COPY não for aceitável (eu não culparia você se você decidir não usá-la), recomendo usar algo diferente de lote, talvez VBScript, Javascript ou Powershell.Ou talvez uma abordagem híbrida como lote com algum VBScript incluído.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top