web-dev-qa-db-fra.com

Windows équivalent de la commande Linux 'touch'?

Qu'est-ce que vous utilisez lorsque vous souhaitez mettre à jour le champ date-modifié d'un fichier sous Windows?

  1. commandes accessibles 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 aussi open source

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.

167
facepalmd

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).

348
Gish Domains

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

160
Greg Hewgill

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
95
ThiagoAlves
type nul >>file & copy file +,,
  • Crée file s'il n'existe pas.
  • Laisse le contenu du fichier seul.
  • Utilise juste cmd construit-ins.
  • Les deux last-access et creation times updated.

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"
58
bobbogo

@ 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

32
Faredoon

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

23
Fredrik Mörk

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}
21
roger

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.

15
Dave Webb

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

ECHO text>file1.txt
15
pkm

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.

14
serg10

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
14
Jon Galloway

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.

12
Adam Davis

Essayez celui-ci à partir de CodeProject .

  • Pas besoin d'installer.
  • Si vous le souhaitez, vous pouvez même modifier la source.
11
Prakash

Vous pouvez également installer Cygwin qui vous donne accès à Touch ainsi qu’à une multitude d’autres commandes * NIX.

9
jamesaharvey

À 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 +,,
5
Dennis Williamson

Il existe des ports Windows de nombreux utilitaires Unix. Jetez un coup d'œil à unxutils ou GnuWin32 projects.

5
VladV

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.

4
Marek

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\" +,,"
4
SharonBL
4
CheapScotsman

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.

3
Superole

dans PowerShell, essayez:

ni fileName.txt

NI est un alias du New-Item cmdlet.

3
Monfa.red

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.

2
Jason

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

2
Tim Partridge

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.

1
WhoIsRich

Essayer

fichier fsutil createnew new.txt 0

1
Peter Hacke

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"

1
JdeBP

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):

http://www.jddesign.co.uk/products/touchpro/touchpro.htm

1
rustyx

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.

1
MD XF

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.

0
Roland

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.

0
0909EM