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.

Joseph Hansen
la source
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")
Joseph Hansen
la source
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 .

William Jackson
la source
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"

boot13
la source
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
Joseph Hansen
la source
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.

Justin Pearce
la source