Comment changer l'horodatage d'un fichier? [dupliquer]


71

Dupliquer possible:
Comment modifier l’horodatage dans une dll ou un exe?
Windows équivalent de la commande Linux 'touch'?

Comment définir l'horodatage d'un fichier via la ligne de commande sur une date spécifique?

Ma situation spécifique est Windows 7.


1
Vous devriez probablement clarifier votre question et indiquer que vous souhaitez choisir le nouvel horodatage. Les deux réponses actuelles supposent que vous recherchiez un port Windows de la commande Unix touchqui définit l'horodatage des fichiers sur l'heure actuelle.
William Jackson

J'ai regardé à travers Sysinternals, et je suis à peu près sûr qu'ils n'ont pas d'utilité pour cela. Vous devriez essayer les programmes liés à superuser.com/questions/135901/…
William Jackson

@ William Jackson a changé, merci pour cela. De plus, s'il s'agissait vraiment d'un port de la commande Unix touch, je pourrais spécifier la date. en.wikipedia.org/wiki/Touch_(Unix) . Quelque chose ne va pas avec la liaison automatique cependant, assurez-vous que vous avez les deux parenthèses.
Joseph Hansen

1
Je ... ne peux pas croire que je n'ai jamais pris la peine de lire man touch. Tu m'as appris quelque chose de nouveau.
William Jackson

Réponses:


89

En raison de la réponse de William Jackson , j'ai trouvé une question similaire sur Stack Overflow .

La réponse acceptée indique d'utiliser Powershell et ces commandes:

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

modifier

Deux exemples:

(Celui-ci provient des commentaires :) Définissez l'heure du dernier accès d'un fichier aaa.csvà l'heure actuelle:

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

Définissez l'heure de création d'un fichier foo.txtle 24 novembre 2015 à 6h00:

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

8
Une légère variation récursive et un peu plus courte, mais moins lisible: "gci -rec |% {$ _. LastWriteTime = ($ _. LastAccessTime = ($ _. CreationTime = (get-date" 2011-09-14T07: 10:00 ")))}"
codybartfast

9
Pour les personnes qui ne connaissent pas grand chose à Powershell, vous devez placer le nom de fichier après Get-Item. Vous pouvez également omettre la chaîne après Get-Date pour définir l'attribut sur la date / heure actuelle, comme pour le comportement par défaut de la commande touch. Enfin, vous pouvez transmettre ce code en tant qu'argument à la commande powershell pour qu'il l'exécute simplement à partir d'un fichier de commandes existant. Exemple:powershell $(Get-Item aaa.csv).lastwritetime=$(Get-Date)
sjbotha le

1
Que faire si je veux faire cela pour chaque fichier d'un répertoire?
CodyBugstein

Recherchez "Powershell chaque fichier". Vous pourriez trouver des questions comme celles-ci: stackoverflow.com/q/16804265/756329 et stackoverflow.com/q/181036/756329
Joseph Hansen

2
Le format de la date et de l’heure ne correspond pas à la commande, mais à l’ensemble du système (ainsi, dans mon système, c’était jj / mm / aa).
Martin Argerami

39

Voir les réponses à cette question .

Cela peut être fait de manière native avec:

copy /b filename.ext +,,

Cela définira l'horodatage à l'heure actuelle.

La documentation de la copycommande est sur TechNet .

Les virgules indiquent l'omission du paramètre Destination .


1
Pouvez-vous expliquer comment cela fonctionne? Quel est le +,,? Comment savoir à quelle date il est configuré?
Joseph Hansen

1
@josmh Consultez le lien de la documentation pour plus de détails. L'horodatage est défini sur l'heure actuelle lorsque vous exécutez la commande. Voulez-vous dire que vous voulez pouvoir changer l’horodatage en une heure arbitraire de votre choix?
William Jackson

7
Je ne vois pas en quoi cela m'aide à choisir une nouvelle date pour le fichier?
Joseph Hansen

Le principal problème avec ceci est lorsque le fichier n'est pas dans le répertoire en cours ... il va copier le fichier dans le répertoire en cours au lieu de le "toucher" à la place.
Kasey Speakman

1
@KaseySpeakman - cette commande repose sur le répertoire en cours. Utilisation pushd FILEDIR, avant la commande et popdaprès
Tydaeus

23

Nirsoft à la rescousse: essayez l'outil gratuit nircmd . C'est un tas d'outils utiles dans un petit programme en ligne de commande. Une des commandes vous permet de spécifier l’ heure de création et l’ heure de modification , ou les deux , comme ceci:

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


2
De plus, si vous souhaitez transférer du temps d'un fichier à un autre, clonefiletime file from fileto fonctionne mieux!
JasonXA

Non en ligne de commande, mais plus pratique pour l'édition en bloc: BulkFileChanger de Nirsoft
SaAtomic

13

Avec Cygwin, pour définir l’horodatage de test.txt sur 31 janvier 2000, à 00: 01.00:

touch -t 200001310001.00 test.txt

Cela revient avec une erreur de format de date invalide.
Ziggy

@ziggy assurez-vous d'obtenir tous les zéros ...
Joseph Hansen

2
Cela a parfaitement fonctionné pour moi touch -t 201608221400 filenamede le régler sur 22.08.2016 14:00:00.
Sébastien

1

Consultez la page Web suivante: http://www.stevemiller.net/apps/

La boîte à outils de la console Win32 contient un utilitaire appelé "touch" qui vous permet de modifier les heures sur un ou plusieurs fichiers. Je crois que cela ne fonctionne qu'avec le format US.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.