234 votes

L'équivalent Windows de la commande Linux "touch" ?

Qu'utilisez-vous lorsque vous voulez mettre à jour le champ date-modifiée d'un fichier sous Windows ?

  1. commandes accessible via C++, .NET, C#, ou quelque chose de natif à Windows (Vista de préférence)
  2. outils/applications de préférence gratuit, et si possible également open source

Éditer : il y a déjà une page pour les candidatures comme l'a souligné CheapScotsman aquí .

Si quelqu'un sait comment je peux faire cela via C++, C#, WSH ou quelque chose de similaire, c'est bien, mais je pense que tout le reste est couvert par la question liée.

430voto

Si vous voulez toucher l'horodateur d'un fichier en utilisant Windows, utilisez la commande suivante à l'invite de commande :

copy /b filename.ext +,,

(où filename.ext est le nom de votre fichier). Le site +,, est un drapeau spécial pour copy en lui disant 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 modifier ce dernier, utilisez la syntaxe suivante :

copy /b Source+,,

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

Modification basée sur les commentaires de Lumi et Justin : mettez cela 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 courant (testé sous Windows 7).

167voto

Ryan Eastabrook Points 1374

J'ai utilisé et recommandé unxutils qui sont des ports natifs Win32 de nombreux utilitaires Unix courants. Il existe un touch là-dedans.

109voto

ThiagoAlves Points 1191

Si tout ce que vous voulez est de changer la date de dernière modification du fichier (ce qui était mon cas) :

C:\> powershell  (ls your-file-name-here).LastWriteTime = Get-Date

67voto

bobbogo Points 1153
type nul >>file & copy file +,,
  • Crée file s'il n'existe pas.
  • Laisse le contenu du fichier intact.
  • Il suffit d'utiliser cmd encastrés.
  • Les deux sites dernier accès y création temps mis à jour.

UPDATE

Gah ! Cela ne fonctionne pas sur les fichiers en lecture seule, alors que touch 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"

33voto

Faredoon Points 430

@dash-tom-bang :

Voici l'explication de Technet sur le mystérieux "+" et les virgules :

copy /b Source+,,

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

La commande de copie permet de fusionner plusieurs fichiers en un seul fichier de destination. Comme il n'est pas possible de spécifier une destination vide à l'aide d'un caractère d'espacement à l'invite de commande, deux virgules peuvent être utilisées pour le signaler.

Et voici la référence de la commande de copie de Technet : http://technet.microsoft.com/en-us/library/bb490886.aspx

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X