Come posso modificare il timestamp su un file? [duplicare]


74

Possibile duplicato:
come modificare il timestamp in una dll o exe?
Equivalente di Windows del comando 'touch' di Linux?

Come posso impostare il timestamp per un file tramite la riga di comando su una data specifica?

La mia situazione specifica è Windows 7.


1
Probabilmente dovresti chiarire la tua domanda e dichiarare che vuoi scegliere il nuovo timestamp. Le due risposte correnti presuppongono che tu stia cercando una porta Windows del comando Unix touchche imposta la data / ora di un file sull'ora corrente.
William Jackson,

Ho guardato Sysinternals e sono abbastanza sicuro che non abbiano un'utilità per questo. Dovresti provare i programmi collegati da superuser.com/questions/135901/…
William Jackson,

@William Jackson Changed, grazie per quello. Inoltre, se fosse davvero una porta del comando Unix touch, potrei specificare la data. en.wikipedia.org/wiki/Touch_(Unix) . Qualcosa non va nel collegamento automatico, assicurati di avere entrambe le parentesi.
Joseph Hansen,

1
Io ... non posso credere di non essermi mai preso la briga di leggere man touch. Mi hai insegnato qualcosa di nuovo.
William Jackson,

Risposte:


92

Grazie alla risposta di William Jackson , ho trovato una domanda simile su Stack Overflow .

La risposta accettata afferma di utilizzare Powershell e questi comandi:

$(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")

modificare

Due esempi:

(Questo è dai commenti :) Imposta l'ora dell'ultimo accesso per un file aaa.csvsull'ora corrente:

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

Imposta l'ora di creazione di un file foo.txtal 24 novembre 2015 alle 6:00:

$(Get-Item foo.txt).creationtime=$(Get-Date "11/24/2015 06:00 am")

8
Una leggera variazione ricorsiva e un po 'più breve, sebbene meno leggibile: "gci -rec |% {$ _. LastWriteTime = ($ _. LastAccessTime = ($ _. CreationTime = (get-date" 2011-09-14T07: 10:00 ")))}"
codybartfast,

9
Per le persone che non sanno molto di Powershell, devi inserire il nome file dopo Get-Item. È inoltre possibile omettere la stringa dopo Get-Date per impostare l'attributo sulla data / ora corrente come il comportamento predefinito del comando touch. Finalmente puoi passare quel codice come argomento al comando powershell per farlo eseguire da un file batch esistente. Esempio:powershell $(Get-Item aaa.csv).lastwritetime=$(Get-Date)
sjbotha,

1
E se volessi farlo per ogni file in una directory?
CodyBugstein,

Cerca "Powershell ogni file". Potresti trovare domande come queste: stackoverflow.com/q/16804265/756329 e stackoverflow.com/q/181036/756329
Joseph Hansen,

4
Il formato di data e ora non è secondo il comando, ma quello a livello di sistema (quindi, nel mio sistema, era gg / mm / aaaa).
Martin Argerami il

40

Vedi le risposte a questa domanda .

In particolare, questo può essere fatto in modo nativo con:

copy /b filename.ext +,,

Ciò imposterà il timestamp sull'ora corrente.

La documentazione per il copycomando è su TechNet .

Le virgole indicano l'omissione del parametro Destination .


2
Puoi spiegare come funziona? Qual è il +,,? Come faccio a sapere a quale data è impostata?
Joseph Hansen,

1
@josmh Controlla il link della documentazione per i dettagli. Il timestamp viene impostato sull'ora corrente quando si esegue il comando. Stai insinuando che vuoi essere in grado di cambiare il timestamp in un momento arbriario di tua scelta?
William Jackson,

7
Non vedo come mi aiuti a scegliere una nuova data per il file?
Joseph Hansen,

Il problema principale con questo è quando il file non si trova nella directory corrente ... copierà il file nella directory corrente invece di "toccarlo" in posizione.
Kasey Speakman,

1
@KaseySpeakman: questo comando si basa sull'essere nella directory corrente. Usa pushd FILEDIR, prima del comando e popddopo
Taddeo il

25

Nirsoft in soccorso: prova lo strumento freeware nircmd . È un mucchio di strumenti utili in un piccolo programma da riga di comando. Uno dei comandi consente di specificare uno o entrambi i tempi di creazione e di modifica , in questo modo:

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


3
Inoltre, se si desidera trasferire il tempo da un file a un altro, clonefiletime file da fileto funziona meglio!
JasonXA,

Non a riga di comando, ma più conveniente per l'editing di massa: BulkFileChanger di Nirsoft
SaAtomic

15

Utilizzando Cygwin, per impostare il timestamp di test.txt al 31 gennaio 2000, alle 00: 01.00:

touch -t 200001310001.00 test.txt

Questo restituisce un errore nel formato della data non valido.
ziggy

@ziggy assicurati di ottenere tutti gli zeri ...
Joseph Hansen,

2
Questo ha funzionato perfettamente per me touch -t 201608221400 filenameimpostarlo su 22.08.2016 14:00:00.
SebastianH,

1

Consulta la seguente pagina Web: http://www.stevemiller.net/apps/

La Casella degli strumenti della console Win32 contiene un'utilità denominata "touch" che consente di modificare i tempi su uno o più file. Credo che funzioni solo con i tempi del formato USA, però.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.