¿Cómo puedo cambiar la marca de tiempo en un archivo? [duplicar]

74

Posible duplicado:
¿Cómo modificar la marca de tiempo en un dll o exe?
¿Windows equivalente al comando de Linux 'touch'?

¿Cómo puedo configurar la marca de tiempo para un archivo a través de la línea de comandos en una fecha específica?

Mi situación específica es Windows 7.

Joseph Hansen
fuente
1
Probablemente debería aclarar su pregunta y afirmar que desea elegir la nueva marca de tiempo. Las dos respuestas actuales suponen que está buscando un puerto de Windows del comando Unix touchque establece la marca de tiempo de un archivo a la hora actual.
William Jackson
He revisado Sysinternals y estoy bastante seguro de que no tienen una utilidad para esto. Debería probar los programas vinculados desde superuser.com/questions/135901/…
William Jackson
@William Jackson cambió, gracias por eso. Además, si realmente fuera un puerto del comando Unix touch, podría especificar la fecha. en.wikipedia.org/wiki/Touch_(Unix) . Sin embargo, algo está mal con el enlace automático, asegúrese de obtener ambos paréntesis.
Joseph Hansen
1
No puedo creer que nunca me haya molestado en leer man touch. Me has enseñado algo nuevo.
William Jackson
¿Duplicado del equivalente
Scott

Respuestas:

92

Debido a la respuesta de William Jackson , encontré una pregunta similar sobre Stack Overflow .

La respuesta aceptada indica usar Powershell y estos comandos:

$(Get-Item ).creationtime=$(Get-Date "mm/dd/yyyy hh:mm am/pm")
$(Get-Item ).lastaccesstime=$(Get-Date "mm/dd/yyyy hh:mm am/pm")
$(Get-Item ).lastwritetime=$(Get-Date "mm/dd/yyyy hh:mm am/pm")

Editar

Dos ejemplos:

(Este es de los comentarios :) Establezca la hora de último acceso para un archivo aaa.csva la hora actual:

$(Get-Item aaa.csv).lastwritetime=$(Get-Date)

Configure la hora de creación de un archivo foo.txtpara el 24 de noviembre de 2015 a las 6:00 a.m.

$(Get-Item foo.txt).creationtime=$(Get-Date "11/24/2015 06:00 am")
Joseph Hansen
fuente
8
Una ligera variación que es recursiva y un poco más corta, aunque menos legible: "gci -rec |% {$ _. LastWriteTime = ($ _. LastAccessTime = ($ _. CreationTime = (get-date" 2011-09-14T07: 10:00 ")))}"
codybartfast
99
Para las personas que no saben mucho sobre Powershell, debe colocar el nombre del archivo después de Get-Item. También puede omitir la cadena después de Get-Date para establecer el atributo en la fecha / hora actual como el comportamiento predeterminado del comando táctil. Finalmente, puede pasar ese código como argumento al comando powershell para que solo lo ejecute desde un archivo por lotes existente. Ejemplo:powershell $(Get-Item aaa.csv).lastwritetime=$(Get-Date)
sjbotha
1
¿Qué sucede si quiero hacer esto para cada archivo en un directorio?
CodyBugstein
Busque "Powershell cada archivo". Puede encontrar preguntas como estas: stackoverflow.com/q/16804265/756329 y stackoverflow.com/q/181036/756329
Joseph Hansen el
44
El formato de fecha y hora no es según el comando, sino el ancho del sistema (por lo tanto, en mi sistema, era dd / mm / aaaa).
Martin Argerami
40

Ver las respuestas a esta pregunta .

Específicamente, esto se puede hacer de forma nativa con:

copy /b filename.ext +,,

Esto establecerá la marca de tiempo en la hora actual.

La documentación para el copycomando está en TechNet .

Las comas indican la omisión del parámetro Destino .

William Jackson
fuente
2
¿Puedes explicar cómo funciona? ¿Cuál es el +,,? ¿Cómo sé en qué fecha se establece?
Joseph Hansen
1
@josmh Consulte el enlace de documentación para obtener más detalles. La marca de tiempo se establece en la hora actual cuando ejecuta el comando. ¿Estás insinuando que quieres poder cambiar la marca de tiempo a un tiempo arbitrario de tu elección?
William Jackson
77
¿No veo cómo eso me ayuda a elegir una nueva fecha para el archivo?
Joseph Hansen
El principal problema con esto es cuando el archivo no está en el directorio actual ... copiará el archivo al directorio actual en lugar de "tocarlo" en su lugar.
Kasey Speakman
1
@KaseySpeakman: este comando se basa en estar en el directorio actual. Uso pushd FILEDIR, antes del comando y popddespués
Tydaeus
25

Nirsoft al rescate: pruebe la herramienta gratuita nircmd . Es un montón de herramientas útiles en un pequeño programa de línea de comandos. Uno de los comandos le permite especificar uno o ambos de los tiempos creados y modificados , de esta manera:

nircmd.exe setfiletime "c: \ temp \ myfile.txt" "24-06-2003 17:57:11" "22-11-2005 10:21:56"

boot13
fuente
3
Además, si desea transferir tiempo de un archivo a otro, clonefiletime filefrom fileto funciona mejor.
JasonXA
Sin línea de comandos, pero más conveniente para la edición masiva: BulkFileChanger por Nirsoft
SaAtomic
15

Usando Cygwin, para configurar la marca de tiempo de test.txt al 31 de enero de 2000, a las 00: 01.00:

touch -t 200001310001.00 test.txt
Joseph Hansen
fuente
Esto vuelve con un error de formato de fecha no válido.
ziggy
@ziggy, asegúrese de obtener todos los ceros ...
Joseph Hansen
2
Esto funcionó perfectamente para mí touch -t 201608221400 filenameestablecerlo en 22.08.2016 14:00:00.
SebastianH
1

Consulte la siguiente página web: http://www.stevemiller.net/apps/

Win32 Console Toolbox contiene una utilidad llamada 'touch' que le permite modificar los tiempos en uno o más archivos. Sin embargo, creo que solo funciona con los tiempos de formato de EE. UU.

Justin Pearce
fuente