Domanda

Sto cercando di confrontare un elenco di file con un file di controllo sul loro timestamp modificato usando

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

Questo dovrebbe restituire il controlfile poiché la data modificata su olderfile è precedente a controlfile. Tuttavia sembra paragonarsi alla data di creazione (la data di creazione della creazione di olderfile è dopo i generacodicitagcode) e quindi restituirà sempre controlfile. L'interruttore olderfile dovrebbe dirlo a /tw da utilizzare l'ultima data scritta (da dir) quindi non sono sicuro di cosa sto facendo male se voglio / TW per lavorare come documentato?

: Aggiornamento:

Fino ad ora ho avuto dir /? in una sottocartella relativa al olderfile. Quando ho copiato controlfile nella stessa directory di olderfile il confronto funzionava come previsto: I.e. Il comando sopra restituito controlfile. Quindi essere in una sottocartella ovviamente rompe il confronto (anche quando la data modificata della sottocartella è come quella del controlfile stesso prima di quello del olderfile).

Quindi ora la mia domanda è come favo al punto di lavoro, è necessario che la struttura della directory sia richiesta?

È stato utile?

Soluzione

Prima una spiegazione del perché il tuo codice è fallito.

Guardando la diretta senza l'opzione / b, visualizza sempre il percorso del file come linea di intestazione, mai insieme al nome del file. Quando si utilizza l'opzione Sort insieme a 2 specifiche del file all'interno della stessa directory, il comando è in grado di ordinare i file e visualizzarli sotto la stessa intestazione della directory. Anche se il nome del file viene ripetuto, sai esattamente quale file viene riferito dall'intestazione.

Ma se le 2 specifiche dei file sono in percorsi diversi, c'è una possibilità che il nome del file sia lo stesso, e solo i percorsi differiscono. In questo caso il tipo non va bene a meno che non venga ordinato ciascuna specifica di file sotto la propria intestazione; Altrimenti non potresti dire quale file è stato. Non ha molto senso ordinare un singolo file, ma ricorda che le specifiche del file potrebbero includere caratteri jolly, quindi ha senso. Quindi ogni volta che l'opzione di ordinamento viene combinata con più specifiche del file utilizzando diversi percorsi, dir eseguirà un tipo separato per ogni percorso, ciascuno con la propria intestazione.

Aggiunta dell'opzione / B Rimuove le intestazioni del percorso, ma non cambia il comportamento di ordinamento! Assolutamente un design sciocco e inutile, ma è quello che ottieni.

Arrivare a una soluzione è molto più problematico, specialmente se si desidera utilizzare Pure Batch con solo i comandi nativi di Windows. Lavorare con le date può essere infuriante con lotto.

La soluzione batch più conveniente che posso trovare è di copiare temporaneamente il file 2 ° nella directory principale, eseguire il confronto all'interno della directory principale, quindi del Copia temporanea. Ma questo potrebbe essere un problema se il file è grande. Assume inoltre che il nome del file non esiste già all'interno della directory principale. Se esiste (o potrebbe), è possibile copiare il file in nome diverso, noto per essere univoco. Ovviamente dovrai quindi tradurre il risultato.

Da ciò che posso dire, qualsiasi altra soluzione batch richiederà analizzare la data e l'ora. Ciò apre un'intera lattina di vermi. (È dotabile)

Se il suggerimento della copia non è accettabile (non ti darei biasimare se decidi di non usarlo), quindi consiglio di usare qualcosa di diverso dal batch, forse VBScript, JavaScript o PowerShell. O forse un approccio ibrido come lotto con un po 'di VBScript gettato in.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top