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.

4voto

Kurt Stutsman Points 1402

Dans PowerShell essayer :

ni fileName.txt

NI est un alias de la Nouvel élément cmdlet.

2voto

Jason Points 201

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

vim foobar.txt +wq!

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

2voto

Tim Partridge Points 305

Enregistrez le fichier suivant sous le nom de touch.bat dans votre %windir%. \system32 ou ajouter l'option dans lequel il est enregistré à 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

2voto

WhoIsRich Points 464

Je voulais que la fonction "tactile" de clonage/duplication des dates de fichiers à partir d'un autre fichier soit native et utilisable à partir d'un fichier batch.

Il suffit de glisser-déposer le fichier vidéo dans le fichier de traitement par lots, 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 découvriez que les fichiers batch ne savent pas gérer les noms de fichiers unicode, que PowerShell se trompe avec les symboles de noms de fichiers et que le double échappement 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

Voici ensuite 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 batch speak :

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

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

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

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

1voto

Essayez

fsutil file createnew new.txt 0

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