2009-07-21 21:44:38 +0000 2009-07-21 21:44:38 +0000
179
179

Équivalent Windows de la commande Linux "touch" ?

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

  1. Des commandes accessibles via C++, .NET, C#, ou quelque chose de natif à Windows (Vista de préférence)
  2. Si quelqu'un sait comment je peux faire cela via C++, C#, WSH ou quelque chose de similaire, bien et bien, sinon je pense que tout le reste est couvert par la question liée.

Réponses (27)

162
162
162
2008-09-09 09:13:05 +0000

J'ai utilisé et je recommande unxutils qui sont des ports Win32 natifs de nombreux utilitaires Unix courants. Il y a une commande touch dedans.

99
99
99
2011-09-09 14:18:55 +0000

Si vous souhaitez simplement modifier la date de dernière modification du dossier (ce qui était mon cas) :

C:\> powershell (ls your-file-name-here).LastWriteTime = Get-Date
58
58
58
2011-02-16 15:21:00 +0000
type nul >>file & copy file +,,
  • Crée file s'il n'existe pas.
  • Laisse le contenu du fichier seul.
  • Utilise juste cmd intégré.
  • Mise à jour des temps de dernier accès et de création.

MISE À 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"
33
33
33
2009-11-25 10:51:32 +0000

@dash-tom-bang :

Voici l'explication de Technet concernant le mystérieux “+” et les virgules :

copy /b Source+,,

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

La commande copy permet de fusionner plusieurs fichiers en un seul fichier de destination. Comme une destination vide ne peut pas être spécifiée en utilisant un caractère d'espacement à l'invite de commande, deux virgules peuvent être utilisées pour l'indiquer.

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

23
23
23
2009-07-22 05:59:04 +0000

Si vous avez envie de le coder vous-même, le .NET propose les méthodes File.SetLastAccessTime , File.SetCreationTime et File.SetLastWriteTime .

21
21
21
2012-07-13 14:54:37 +0000

voici une version récursive utilisant powershell… cela changera la dernière fois modifiée 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}
15
15
15
2008-09-09 09:17:29 +0000

[ cygwin ]&3 est livré avec touch. Je sais que vous avez mentionné que vous ne vouliez pas installer tout un framework, mais cygwin est assez léger, et peut être appelé depuis la fenêtre de commande dos sans que toute la ligne de commande de type unix soit activée.

Vous pouvez également contrôler les outils à installer, ainsi vous pouvez simplement installer le fichier touch.exe, et laisser le reste du framework.

15
15
15
2008-09-09 09:18:05 +0000

Le projet GnuWin32 comporte des portages Windows des versions Gnu des utilitaires en ligne de commande Unix.

Il se présente sous la forme de plusieurs paquets séparés et vous pouvez installer uniquement les commandes dont vous avez besoin sans aucune autre dépendance. Pour touch, vous aurez besoin du paquet CoreUtils .

15
15
15
2013-07-10 11:52:23 +0000

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

ECHO text>file1.txt
14
14
14
2009-07-21 22:03:00 +0000

Voici un simple fichier reg que j'ai écrit à ajouter un clic droit “toucher” dans l'explorateur Windows . Il serait facile de le scripter aussi, puisqu'il appelle simplement :

cmd.exe /c copy %1+nul %1 /by
13
13
13
2008-09-09 09:13:36 +0000

Native win32 ports of many unix commands , including touch.

Je l'ai déjà utilisé et il fonctionne bien - pas d'installation, pas de DLL, etc

11
11
11
2008-09-09 09:19:08 +0000

Essayez celui-ci à partir de CodeProject .

  • Pas besoin de l'installer.
  • Si vous voulez, vous pouvez même modifier le source.
9
9
9
2009-07-21 21:49:43 +0000

Vous pouvez également installer Cygwin qui vous donne Touch ainsi qu'une pléthore d'autres commandes *NIX.

5
5
5
2009-07-21 21:55:15 +0000

Il existe des ports Windows de nombreux utilitaires Unix. Consultez les projets unxutils ou GnuWin32 .

5
5
5
2011-02-28 18:10:16 +0000

D'après une question similaire sur le débordement de pile.

Pour la mise à jour des horodatages (en ignorant les autres fonctionnalités de touch), je dirais :

copy /b filename.ext +,,
4
4
4
2009-07-21 21:45:42 +0000

Que diriez-vous du projet de code “Touch for Windows” : http://www.codeproject.com/KB/applications/touch_win.aspx

edit ; Même question qu'ici : https://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command/51439

3
3
3
2012-09-28 14:14:07 +0000

Si vous utilisez git pour un ou plusieurs projets, la commande git-bash pour Windows basée sur mingw a la commande touch. Je tiens à remercier @greg-hewgill de m'avoir fait remarquer qu'il n'existe pas d'utilitaires pour Windows, car c'est ce qui m'a donné l'idée d'essayer de toucher dans git-bash.

3
3
3
2015-06-17 00:23:57 +0000

dans PowerShell essayez :

ni fileName.txt

NI est un alias du New-Item cmdlet.

2
2
2
2009-08-07 15:53:46 +0000

J'ai trouvé un moyen rapide de le faire si vous avez installé vim (pas génial pour les gros fichiers, ouvre le fichier entier puis le ferme…)

vim foobar.txt +wq!

Le “+” définit l'argument pour exécuter les commandes suivantes. “wq !” est “write, quit, force”. Cela ouvrira le fichier, fera une sauvegarde, puis le fermera immédiatement après.

2
2
2
2012-11-11 01:27:44 +0000

Sauvegardez le fichier suivant sous le nom touch.bat dans votre dossier %windir%\system32 ou ajoutez le dossier dans lequel il est sauvegardé à 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

Sample usage :

touch *.cpp
touch somefile.c

Reference : Microsoft KB 69581

2
2
2
2018-02-18 21:50:03 +0000

Je voulais que la fonction “tactile” de clonage / duplication des dates de fichier à partir d'un autre fichier, en mode natif, et qu'elle soit utilisable à partir d'un fichier par lots.

Donc, “glisser-déposer” du fichier vidéo sur le fichier par lots, FFMPEG s'exécute, puis “Date de création” et “Date de modification” du fichier d'entrée est copié sur le fichier de sortie. Cela semblait simple au début, jusqu'à ce que vous découvriez que les fichiers batch sont très mauvais pour gérer les noms de fichiers unicode, que PowerShell en ligne se trompe avec les symboles de noms de fichiers et que leur double évasion est un cauchemar. Ma solution a été de faire de la partie “touch” un script PowerShell séparé que j'ai appelé “CLONE-FILE-DATE”. ps1’ et il 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

Puis voici un exemple d'utilisation dans mon fichier batch ‘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, donc je vais juste expliquer le langage batch :

%~dp0 est le répertoire courant du fichier batch.

%~1 est le chemin du fichier déposé sur le lot sans les guillemets.

CHCP 65001 > nul met les caractères en UTF-8 et avale la sortie.

-ExecutionPolicy ByPass vous permet d'exécuter PowerShell sans avoir besoin de modifier la politique globale, qui est là pour empêcher les gens d'exécuter accidentellement des scripts.

1
1
1
2012-10-02 14:30:49 +0000

Cela n'a rien à voir avec la question initiale, mais je trouve cela très utile sous Windows grâce à l'interface graphique.

J'utilise l'utilitaire TouchPro qui fournit une GUI (intégrée au shell de l'explorateur) : http://www.jddesign.co.uk/products/touchpro/touchpro.htm

1
1
1
2017-05-10 17:46:52 +0000

Eh bien, si vous voulez vraiment avoir la commande touch disponible, vous pouvez mettre ceci dans un fichier batch appelé touch.bat et le coller dans C:\Windows :

TYPE NUL >>%1

Assez simple.

1
1
1
2011-02-28 19:57:38 +0000

Les cinq alternatives mentionnées ci-dessus, plus trois autres non mentionnées ici, peuvent être trouvées sur SuperUser : “Windows Recursive Touch Command”

0
0
0
2019-04-11 17:41:41 +0000

Parce que j'avais besoin de cela aussi et d'un certain nombre d'autres choses, j'ai créé ma propre extension shell qui fait cela : AllSorts J'ai également créé cette extension ici en open-source

0
0
0
2015-05-28 10:14:59 +0000

Les gens d'Unix ont résolu le problème général de la mise à jour de la date de n'importe quel fichier avec la commande touch. 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 de rendre visible les modifications de la couleur de fond de la tuile d'application, voir cette question de SO . Plutôt que de mettre en œuvre l'un des outils intelligents ci-dessus, je trouve qu'il est 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, l'ajout ou la suppression d'un point final ne fait jamais de mal.

0
0
0
2015-12-26 20:40:13 +0000

J'apprécie que cette question soit ancienne, je viens de découvrir le toucher sur mon système Windows 10. J'ai téléchargé et installé Git depuis ici (je crois) et il semble que Touch et divers autres utilitaires se trouvent dans le dossier bin.