Qu'est-ce que vous utilisez lorsque vous souhaitez mettre à jour le champ date-modifié d'un fichier sous Windows?
Edit: il existe déjà une page pour les applications comme indiqué par CheapScotsman ici .
Si quelqu'un sait comment je peux le faire via C++, C #, WSH ou quelque chose de similaire, tout va bien, sinon je penserais que tout le reste est couvert dans la question liée.
Si vous souhaitez toucher l'horodatage d'un fichier à l'aide de Windows, utilisez la commande suivante à l'invite de commande:
copy /b filename.ext +,,
(où filename.ext
est le nom de votre fichier). Le +,,
est un drapeau spécial pour copy
lui demandant de simplement mettre à jour la date/heure sur le fichier :
* Changer l'heure et la date d'un fichier
Si vous souhaitez attribuer l'heure et la date actuelles à un fichier sans le modifier, utilisez la syntaxe suivante:
copy /b Source+,,
Les virgules indiquent l'omission du paramètre Destination.
_ {Editer basé sur les commentaires de Lumi et Justin:} _ mettre ceci dans un fichier batch, par exemple. touch.cmd
@COPY /B %1+,, %1
Cela fonctionne même si le fichier ne se trouve pas dans le répertoire actuel (testé sous Windows 7).
J'ai utilisé et recommandé unxutils qui sont des ports Win32 natifs de nombreux utilitaires Unix courants. Il y a une commande touch
dedans.
Si tout ce que vous voulez, c'est changer la date de la dernière modification du fichier (ce qui était mon cas):
C:\> powershell (ls your-file-name-here).LastWriteTime = Get-Date
type nul >>file & copy file +,,
file
s'il n'existe pas.cmd
construit-ins.METTRE À JOUR
Gah! Cela ne fonctionne pas sur les fichiers en lecture seule, alors que touch
le fait. Je suggère:
:touch
if not exist "%~1" type nul >>"%~1"& goto :eof
set _ATTRIBUTES=%~a1
if "%~a1"=="%_ATTRIBUTES:r=%" (copy "%~1"+,,) else attrib -r "%~1" & copy "%~1"+,, & attrib +r "%~1"
@ dash-tom-bang:
Voici l'explication de Technet sur le mystérieux '+' et les virgules:
copie/b Source + ,
Les virgules indiquent l'omission du paramètre Destination.
La commande copy prend en charge la fusion de plusieurs fichiers en un seul fichier de destination. Dans la mesure où une destination vide ne peut pas être spécifiée à l'aide d'un caractère d'espacement dans l'invite de commande, vous pouvez utiliser deux virgules pour le signaler.
Et voici la référence de commande de copie de Technet: http://technet.Microsoft.com/en-us/library/bb490886.aspx
Si vous avez envie de le coder vous-même, .NET propose les méthodes File.SetLastAccessTime
, File.SetCreationTime
et File.SetLastWriteTime
.
voici une version récursive utilisant powershell ... cela changera la dernière heure de modification pour tous les fichiers et sous-répertoires, et les fichiers dans les sous-répertoires de ce répertoire
ps c:myDir> Get-ChildItem . * -recurse | ForEach-Object{$_.LastWriteTime = get-date}
Le projet GnuWin32 possède des ports Windows des versions Gnu des utilitaires de ligne de commande Unix.
Il se présente sous forme de plusieurs packages distincts et vous pouvez installer uniquement les commandes dont vous avez besoin sans aucune autre dépendance. Pour touch
, vous auriez besoin du paquet CoreUtils package.
J'ai essayé de créer un fichier vide dans mon script batch. Vous pouvez utiliser ceci:
ECHO text>file1.txt
cygwin
est livré avec touch
. Je sais que vous avez indiqué que vous ne souhaitiez pas installer une structure complète, mais cygwin est relativement léger et peut être appelé à partir de la fenêtre de commande dos sans que la ligne de commande de type Unix ne soit activée.
Vous pouvez également contrôler les outils à installer pour installer simplement le fichier touch.exe
et quitter le reste de la structure.
Voici un fichier de configuration simple que j'ai écrit ajoutez un clic droit "toucher" dans l'Explorateur Windows . Ce serait facile de le script aussi, puisqu'il appelle simplement:
cmd.exe /c copy %1+nul %1 /by
Ports Win32 natifs de nombreuses commandes unix , y compris touch.
Je l'ai déjà utilisé et cela fonctionne bien - pas d'installation, pas de DLL, etc.
Essayez celui-ci à partir de CodeProject .
Vous pouvez également installer Cygwin qui vous donne accès à Touch ainsi qu’à une multitude d’autres commandes * NIX.
À partir d'une question similaire sur débordement de pile.
Pour mettre à jour les horodatages (en ignorant les autres fonctionnalités de touch
), je choisirais:
copy /b filename.ext +,,
sur le site:
Funduc Software Touch est un utilitaire «tactile» gratuit qui vous permet de modifier l’heure/la date et/ou d’attribuer des timbres sur un ou plusieurs fichiers. De plus, FS Touch peut ajouter/soustraire un nombre spécifié de secondes à partir de la durée du fichier existant. Vous pouvez spécifier le ou les fichiers et/ou sous-répertoires à modifier via des "masques de fichiers complexes". Le programme peut être exécuté de manière interactive ou à partir de la ligne de commande. La nouveauté de la version 7.2 est un commutateur de ligne de commande permettant de modifier l’horodatage du fichier modifié +/- le nombre de secondes spécifié.
FS Touch fonctionne sous Windows XP, Vista, Windows 7 et Windows 8.
Ce contenu peut être sauvegardé dans un fichier reg. Cela ajoutera un menu contextuel par clic droit pour tous les fichiers dotés de la fonction "Touch File" (testé sur Windows 7). Copier tout les lignes suivantes dans le fichier reg. Exécutez le fichier et approuvez la question. Faites un clic droit sur n’importe quel fichier (ou plusieurs fichiers) - L’option "Touch File" est maintenant disponible.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\Shell]
[HKEY_CLASSES_ROOT\*\Shell\Touch File]
[HKEY_CLASSES_ROOT\*\Shell\Touch File\command]
@="cmd /C copy /b \"%1\" +,,"
Que diriez-vous de codeproject "Touch pour Windows": http://www.codeproject.com/KB/applications/touch_win.aspx
modifier; Même question que ici: https://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command/51439
Si vous utilisez git pour un ou plusieurs projets, le git-bash
pour Windows basé sur Mingw possède la commande touch
. Je tiens à remercier @ greg-hewgill de m'avoir fait remarquer que les utilitaires nix existent pour Windows, car c’est ce qui m’a donné l’idée d’essayer de toucher à git-bash.
J'ai trouvé un moyen rapide de le faire si vim est installé (pas génial pour les gros fichiers, ouvrira tout le fichier puis le fermera ...)
vim foobar.txt +wq!
Le "+" définit l'argument pour exécuter les commandes suivantes. "wq!" est "écris, quitte, force". Cela ouvrira le fichier, fera une sauvegarde, puis le fermera immédiatement après.
Enregistrez les éléments suivants sous le nom touch.bat dans votre dossier% windir%\system32 ou ajoutez le dossier dans lequel ils sont enregistrés dans votre variable d’environnement PATH:
@echo off
if %1.==. goto end
if not exist %1 goto end
copy /b %1 +,, > nul
echo %1 touched!
:end
Exemple d'utilisation:
touch *.cpp
touch somefile.c
Référence: Microsoft KB 69581
Je voulais la fonctionnalité 'tactile' de clonage/duplication du fichier date d'un autre fichier, nativement, et être utilisable à partir d'un fichier batch.
Donc, faites glisser le fichier vidéo dans un fichier batch, FFMPEG s'exécute, puis la date de création et la date de modification du fichier d'entrée sont copiées dans le fichier de sortie.
Cela semblait simple au début, jusqu'à ce que vous constatiez que les fichiers de traitement par lots gâchent le traitement des noms de fichiers Unicode, que PowerShell en ligne gâche les symboles de nom de fichier et que leur échapper est un cauchemar.
Ma solution a été de faire de la partie tactile un script PowerShell distinct que j'ai appelé "CLONE-FILE-DATE.ps1" et qui contient:
param
(
[Parameter(Mandatory=$true)][string]$SourcePath,
[Parameter(Mandatory=$true)][string]$TargetPath
)
(GI -LiteralPath $TargetPath).CreationTime = (GI -LiteralPath $SourcePath).CreationTime
(GI -LiteralPath $TargetPath).LastWriteTime = (GI -LiteralPath $SourcePath).LastWriteTime
Ensuite, voici un exemple d'utilisation dans mon fichier de commandes 'CONVERT.BAT':
%~dp0\ffmpeg -i "%~1" ACTION "%~1-output.mp4"
CHCP 65001 > nul && PowerShell -ExecutionPolicy ByPass -File "%~dp0\CLONE-FILE-DATE.PS1" "%~1" "%~1-output.mp4"
Je pense que le PowerShell est lisible, alors expliquons simplement le lot:
% ~ dp0 est le répertoire actuel du fichier de commandes.
% ~ 1 est le chemin du fichier déposé dans le lot sans guillemets.
CHCP 65001> nul définit les caractères sur UTF-8 et avale le résultat.
-ExecutionPolicy ByPass vous permet d'exécuter PowerShell sans avoir à modifier la stratégie globale, qui empêche les personnes d'exécuter des scripts par inadvertance.
Essayer
fichier fsutil createnew new.txt 0
Les cinq alternatives mentionnées ci-dessus, ainsi que trois autres non mentionnées ici, peuvent être trouvées sur SuperUser: "Windows Recursive Touch Command"
Ceci est légèrement différent de la question initiale, mais je trouve cela très utile sous Windows en raison de l'interface graphique.
J'utilise l'utilitaire TouchPro qui fournit unGUI(construit dans l'explorateur Shell):
Eh bien, si vous vraiment voulez que la commande touch
soit disponible, vous pouvez le placer dans un fichier de commandes appelé touch.bat
et le coller dans C:\Windows
:
TYPE NUL >>%1
Assez simple.
Les gens d'Unix ont résolu le problème général de la mise à jour de la date d'un fichier avec la commandetouch . Cependant, pour Windows, une méthode plus simple est parfois possible pour des cas particuliers.
Je dois mettre à jour l'horodatage d'un raccourci d'application dans Windows 8.1 afin d'apporter des modifications à la couleur d'arrière-plan de la mosaïque d'application visible, voir this SO question . Plutôt que de mettre en œuvre l'un des outils intelligents ci-dessus, je trouve plus facile de modifier le champ de commentaire du raccourci. La plupart des gens laissent ce champ vide, mais bien sûr, un commentaire utile est rapidement conçu. Et si un commentaire existe, ajouter ou supprimer une dernière période ne nuit jamais.
J'apprécie que c'est une vieille question, je viens de découvrir tactile sur mon système Windows 10. J'ai téléchargé et installé Git depuis ici (je pense) et il semble que touch et divers autres utilitaires sont dans le dossier bin.