Pregunta

Estoy tratando de comparar una lista de archivos con un archivo de control sobre sus modificado marca de tiempo utilizando

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

esto debería devolver el controlfile como la fecha de modificación en olderfile es anterior a controlfile.Sin embargo parece ser la comparación de la fecha de creación (olderfile's la fecha de creación es después de controlfile's) y así siempre se puede volver olderfile.El /tw el interruptor debe decir dir para utilizar el último escrito de fecha (a partir de dir /?) así que no estoy seguro de lo que estoy haciendo mal, si me quiere /tw para trabajar como documentado?

:ACTUALIZACIÓN:

Hasta ahora he tenido olderfile en una subcarpeta en relación a controlfile.Cuando me copian olderfile en el mismo directorio que controlfile la comparación funcionado como se esperaba, es decir,el comando de arriba devuelto controlfile.Así que estar en una subcarpeta, obviamente, se rompe la comparación (incluso cuando la subcarpeta de fecha de modificación es como la de olderfile's mismo antes de que de controlfile).

Así que mi pregunta ahora es ¿cómo puedo solucionar este dado que la estructura de directorios es necesario?

¿Fue útil?

Solución

Primero una explicación de por qué el código está fallando.

Mirando DIR sin la opción /B, siempre se muestra la ruta de acceso del archivo como una línea de encabezado, nunca junto con el nombre del archivo.Cuando se utiliza la opción de clasificación junto con 2 de las especificaciones de los archivos en el mismo directorio, el comando es capaz de ordenar los archivos y mostrarlos en el mismo directorio encabezado.Incluso si el nombre de archivo se repite, saben exactamente de qué archivo se refiere el encabezado.

Pero si el archivo 2 de las especificaciones se encuentran en diferentes rutas, hay una posibilidad de que el nombre del archivo es el mismo, y sólo los caminos diferentes.En este caso, el tipo no hace ningún bien a menos que cada archivo de especificación que se ordenan bajo su propio encabezado;de lo contrario, no se podía saber que archivo era el que.No tiene mucho sentido para ordenar un único archivo, pero recuerde que el archivo spec podría incluir caracteres comodín, así que tiene sentido.Así que cada vez que la opción de clasificación se combina con múltiples del archivo de especificaciones de uso de los diferentes caminos, DIR hará una ordenación separada para cada ruta, cada una con su propio encabezado.

La adición de la opción /B elimina la ruta de los encabezados, pero no cambiar el tipo de comportamiento!Absolutamente absurdo e inútil de diseño, pero que es lo que usted consigue.

De llegar a una solución es mucho más problemático, especialmente si usted desea utilizar puro lote con sólo los nativos de comandos de Windows.Trabajar con fechas puede ser exasperante con el lote.

El más oportuno lote solución que se me ocurre es copiar temporalmente el 2º archivo en el directorio padre, ejecutar su comparación en el directorio principal, y luego del temporal de la copia.Pero eso podría ser un problema si el archivo es grande.Además, asume el nombre de archivo ya no existe en el directorio principal.Si lo hace (o podría) existe, puede copiar el archivo a otro nombre, conocido por ser único.Por supuesto, usted tendría que traducir el resultado.

Por lo que puedo decir, cualquier otro lote solución se requiere el análisis de la fecha y la hora.Que abre una lata de gusanos.(Es factible)

Si la COPIA sugerencia no es aceptable (yo no te culpo si usted decide no usarlo), entonces le recomendamos el uso de algo distinto de lote, tal vez VBScript, Javascript, o Powershell.O tal vez un enfoque híbrido como lote con algunos de VBScript que se lanzan.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top