Question Windows équivalent de la commande Linux 'touch'?


Que utilisez-vous lorsque vous souhaitez mettre à jour le champ modifié par date 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 libre, et si possible open source aussi

Modifier:  il y a 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, bien et bien, sinon je pense que tout le reste est couvert dans la question liée.


151
2018-05-29 00:45


origine


Les quatre alternatives mentionnées ci-dessus, plus quatre autres non mentionnées ici, peuvent être trouvées dans la réponse à une question similaire: "Commande tactile récursive Windows" - JdeBP
stackoverflow.com/questions/210201/...    mentionne une charge, y compris REM.>a - barlop


Réponses:


Si vous souhaitez toucher la date 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 en lui disant simplement mettre à jour la date / heure sur le fichier:

* Changer l'heure et la date d'un fichier

Si vous souhaitez affecter l'heure et la date actuelles à un fichier sans modifier le fichier, utilisez la syntaxe suivante:

copy /b Source+,,

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

Edit basé sur les commentaires de Lumi et Justin: mettez ceci dans un fichier batch, par exemple. touch.cmd

@COPY /B %1+,, %1

Cela fonctionne même si le fichier n'est pas dans le répertoire en cours (testé sur Windows 7).


333
2017-09-09 09:13



Qu'est-ce que ça fait? Où est-il documenté? (Google ne parvient pas à indexer "+ ,,", et le site MS ne me conduit pas dans la bonne direction car la recherche sur 'copie' ne sert à rien.) Je veux dire, ça marche très bien et je prendrai ça beaucoup pour acquis, mais je suis curieux. - dash-tom-bang
Documentation pour copy: technet.microsoft.com/en-us/library/bb490886.aspx - Joseph Hansen
type touch.bat est @echo off et ligne suivante copy /b %1 +,, - mettre dans C:\bin ou qu'avez-vous pour vos propres scripts, et ensuite vous pouvez l'utiliser comme touch myfile.txt. - Lumi
Dans Win7 cela ne fonctionnera pas si vous n'êtes pas dans le dossier contenant le fichier. Il va créer une copie dans le répertoire de travail en cours.
Si vous devez le faire dans un dossier distant (chemin UNC) - vous devez également spécifier la destination de la commande de copie - copy /b Source+,, Source - où Source inclut le chemin complet du fichier - Justin


J'ai utilisé et recommander unxutils qui sont des ports Win32 natifs de nombreux utilitaires Unix courants. Il y a un touch commande là-bas.


160
2017-09-09 14:18



Comme presque tous les ports Unix-to-Windows, cela ne fonctionne pas avec les caractères unicode dans les noms de fichiers en dehors de l'ensemble de codage par défaut pour les programmes non-Unicode. Testez le nom du fichier qui déclenchera tous ces outils: "test тест τεστ.txt" - RomanSt
gnuwin32 l'a. mais en effet, gnuwin32 échoue également pour les caractères Unicode. - barlop
Mise à jour à partir de 2017 Dans Windows 10, nous pouvons utiliser le sous-système Linux pour Windows, qui installe bash. Pas besoin de cygwin, MinGW, unxutils ou tout autre unix partiel sur les ports Windows. docs.microsoft.com/fr-fr/windows/wsl/install-win10 - Davos


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

90
2018-02-16 15:21



PowerShell FTW. Je veux dire, sérieusement, unix est cool mais PS est plus cool. - matt
Vous pouvez également mettre à jour la dernière fois pour plusieurs fichiers / dossiers
Cela ne fonctionnera que sur un seul fichier. Pour plusieurs fichiers: ls * | ForEach-Object {$ _. LastWriteTime = Get-Date} - Eli Algranti
Si vous voulez le faire récursivement, cela fonctionne plutôt bien: gci -recu -inc "."|% {$ _. LastWriteTime = Get-Date} - BrainSlugs83
@ BrainSlugs83: utilise des backticks `pour le code: gci -recu -inc "*.*" | % { $_.LastWriteTime = Get-Date } - alldayremix


type nul >>file & copy file +,,
  • Crée file s'il n'existe pas.
  • Laisse le contenu du fichier seul.
  • Juste utilise cmd intégrés.
  • Tous les deux dernier accès et création fois mis à jour

METTRE À JOUR

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

51
2017-11-25 10:51



Il est dommage que cette copie ne puisse pas ignorer l’attribut + r comme le fait xcopy. Ou, c'est dommage que xcopy ne supporte pas l'étrange filename +,, syntaxe. - Abel
Malheureusement, cela ne fonctionne pas (du moins pas dans Windows 7). Il semble que l'interpréteur de commandes ne mette pas à jour l'horodatage de la destination d'une redirection si le fichier n'est pas réellement modifié (c'est-à-dire qu'il n'y a pas de données à rediriger). - Synetech


@ dash-tom-bang:

Voici l'explication de Technet sur les mystérieuses «+» et les virgules:

copier / b Source + ,,

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

La commande de copie prend en charge la fusion de plusieurs fichiers en un seul fichier de destination. Comme une destination vide ne peut pas être spécifiée à l'aide d'un caractère d'espacement à l'invite de commandes, vous pouvez utiliser deux virgules 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


32
2017-07-13 14:54



Maintenant, c'est juste une syntaxe ratée. Sérieusement, a quoi pensaient-ils? Notez également que la même documentation indique "Destination: Obligatoire" ... Je suis étonné. - sth
Cela ne semble même pas fonctionner dans Vista ... Je me demande s'ils sont venus à leurs sens? - quillbreaker
Fonctionne dans Windows 7 - Imran
Cela a fonctionné pour moi même sans virgules: copy file.ext + Donc, la documentation est aussi éloignée du comportement réel que du comportement des attentes raisonnables. - Abgan
Cela a fonctionné dans Windows Server 2008 mais seulement si vous êtes dans le dossier contenant le fichier - FrinkTheBrave


Si vous souhaitez le coder vous-même, .NET offre le File.SetLastAccessTime, File.SetCreationTime et File.SetLastWriteTime méthodes.


22
2017-09-09 09:18





voici une version récursive utilisant powershell ... cela changera l'heure de la dernière modification pour tous les fichiers et sous-répertoires, ainsi que les fichiers dans les sous-répertoires de ce répertoire

ps c:myDir> Get-ChildItem . * -recurse | ForEach-Object{$_.LastWriteTime = get-date}

21
2017-07-10 11:52



Moins verbeux mais en utilisant uniquement les raccourcis Powershell standard: ls * -recurse | % { $_.LastWriteTime = Get-Date } - Jonas


le GnuWin32 project dispose des ports Windows des versions Gnu des utilitaires de ligne de commande Unix.

Il se présente sous la forme de plusieurs packages distincts et vous pouvez installer uniquement les commandes dont vous avez besoin sans autres dépendances. Pour touch vous auriez besoin du CoreUtils paquet.


14
2017-09-09 09:17





J'ai essayé ceci pour créer un fichier vide dans mon script batch. Vous pouvez utiliser ceci:

ECHO text>file1.txt

14
2017-09-09 09:13



Ceci est la meilleure méthode rapide de BY FAR. Je voulais juste créer un fichier .gitignore, et Windows 7 continue de se plaindre "doit entrer un nom de fichier" etc. echo pie>.gitignore a travaillé un régal - merci!
@Alex Ceci n'est pas lié, mais cette erreur Windows est due au fait que le fichier commence par un point. Il existe un étrange hack pour contourner cela dans l'Explorateur Windows: faites en sorte que le fichier se termine par une période. Alors tapez .gitignore. et lorsque vous appuyez sur Entrée, Windows supprime le point final. Fou, mais ça marche. - Brad Cupit
Je souhaite que je puisse donner assez de commentaires pour que cela attire les gros joueurs en popularité. - Jonathan Mee
Cela ne crée pas un fichier vide si, fichier1.txt contient "texte". - Joshua Meyers