Windows équivalent de 'touch' (c'est-à-dire la manière node.js de créer un index.html)

197

Sur une machine Windows, j'obtiens cette erreur

«touch» n'est pas reconnu comme une commande interne ou externe, un programme utilisable ou un fichier de commandes.

quand je suis les instructions pour faire:

touch index.html app.js style.css

Existe-t-il un équivalent Windows de l'utilisation du «toucher»? Dois-je créer ces fichiers à la main (et les modifier pour changer l'horodatage) afin d'implémenter ce type de commande? Cela ne semble pas très ... nodal ...

CurieuxÀ propos de Noeud
la source
5
Une simple recherche Google vous montre de nombreuses implémentations de Windows touch. Autre discussion ici: superuser.com/questions/10426/… et la bibliothèque Cygwin est un ensemble d'outils commun des commandes Unix sous Windows.
jfriend00
4
Duplicata possible de cette question: stackoverflow.com/questions/26343974/…
Plastic Sturgeon
1
Veuillez passer directement à la réponse de Raghuveer si vous avez atterri ici en utilisant PowerShell.
RBT

Réponses:

281

dans le type de fenêtre cmd:

type nul > your_file.txt

Cela créera 0 octet dans le fichier your_file.txt.

Une autre façon de le faire est d'utiliser la commande echo :

echo.> your_file.txt

écho. - créera un fichier avec une ligne vide dedans.

Modifié le 01/04/2019:

Si vous avez besoin de conserver le contenu du fichier, utilisez >> au lieu de>

>   Creates a new file
>>  Preserves content of the file

Exemple

type nul >> your_file.txt

Modifié le 07/04/2020

Vous pouvez également utiliser la commande d' appel .

Appelle un programme batch depuis un autre sans arrêter le programme batch parent. La commande call accepte les étiquettes comme cible de l'appel.

Exemple:

call >> your_file.txt
Vlad Bezden
la source
2
sur Windows 7, la première option produit une boîte de dialogue effrayante, puis vous voyez access denieddans la console. La deuxième option fonctionne très bien!
Décodé le
13
La réponse est fausse, cela ne fonctionne que lorsque le fichier n'existe pas. Si le fichier existe, l'utilisation >>du premier ne fait rien, le second ajoute une ligne à la fin du fichier. La bonne réponse est superuser.com/questions/10426/…
stenci
3
@stenci - Je viens de l'essayer sur un fichier inexistant et cela a très bien fonctionné. Il a créé le fichier ok. Vous n'avez peut-être pas les droits d'administrateur?
dcp
2
@stenci ce lien de superutilisateur est génial. Vous devriez l'afficher comme réponse.
Denise Skidmore
@DeniseSkidmore Merci, j'ai ajouté la réponse. C'est profond et les gens liront plus probablement mon commentaire sur cette réponse que ma réponse, mais maintenant c'est là.
stenci
67

Windows n'inclut pas nativement une touchcommande.

Vous pouvez utiliser l'une des versions publiques disponibles ou vous pouvez utiliser votre propre version. Enregistrez ce code sous touch.cmdet placez-le quelque part dans votre chemin

@echo off
    setlocal enableextensions disabledelayedexpansion

    (for %%a in (%*) do if exist "%%~a" (
        pushd "%%~dpa" && ( copy /b "%%~nxa"+,, & popd )
    ) else (
        type nul > "%%~fa"
    )) >nul 2>&1

Il itérera sur sa liste d'arguments, et pour chaque élément s'il existe, mettra à jour l'horodatage du fichier, sinon, le créera.

MC ND
la source
celui-ci est le meilleur, fonctionne exactement comme prévu ... d'autres solutions ici fonctionnent mais laissent des textes d'avertissement / d'erreur, IDK si cela m'est exclusif.
Shakil
35

Vous pouvez utiliser cette commande: ECHO >> filename.txt

il créera un fichier avec l'extension donnée dans le dossier actuel.

METTRE À JOUR:

pour un fichier vide utiliser: copier NUL filename.txt

Aaron Clark
la source
8
Encore mieux type NUL > filename(crée un fichier de 0 octets)
krzemian
24
Comme le toucher, cela n'écrasera pas le fichier s'il existe:type NUL >> filename
henon
3
C'est une excellente façon d'ajouter "ECHO est activé". à votre dossier.
ripvlan
4
cela ne met pas à jour l'horodatage des fichiers existants.
Denise Skidmore
1
Je pense que Denise Skidmore répond à henon, pas à OP. (Je seconde son commentaire.)
Keith Russell
28

La réponse est fausse, cela ne fonctionne que lorsque le fichier n'existe pas. Si le fichier existe, l'utilisation du premier ne fait rien, le second ajoute une ligne à la fin du fichier.

La bonne réponse est:

copy /b filename.ext +,,

Je l'ai trouvé ici: /superuser/10426/windows-equivalent-of-the-linux-command-touch/764721#764721

pochoir
la source
1
Cette réponse ne fonctionne pas lorsque le fichier n'existe pas. (CMD produit une erreur.)
Keith Russell
15

Je suis surpris de voir combien de réponses ici sont tout simplement fausses . Ne rien faire écho dans un fichier remplira le fichier avec quelque chose comme ECHO is ON, et essayer de faire écho $nuldans un fichier sera littéralement placé $nuldans le fichier. De plus, pour PowerShell, l'écho $nulldans un fichier ne créera pas réellement un fichier de 0 Ko, mais quelque chose encodé commeUCS-2 LE BOM , ce qui peut devenir compliqué si vous devez vous assurer que vos fichiers n'ont pas de marque d'ordre des octets.

Après avoir testé toutes les réponses ici et référencé des réponses similaires, je peux garantir qu'elles fonctionneront par shell de console. Changez simplement FileName.FileExtensionle chemin complet ou relatif du fichier que vous voulez touch; merci à Keith Russell pour leCOPY NUL FILE.EXT mise à jour:

CMD avec mises à jour d'horodatage

copy NUL FileName.FileExtension

Cela créera un nouveau fichier nommé tout ce que vous avez placé au lieu d' FileName.FileExtensionune taille de 0 octet. Si le fichier existe déjà, il se copiera essentiellement sur place pour mettre à jour l'horodatage. Je dirais que c'est plus une solution de contournement qu'une fonctionnalité 1: 1 avectouch mais je ne connais aucun outil intégré pour CMD qui peut accomplir la mise à jour de l'horodatage d'un fichier sans changer aucun de ses autres contenus.

CMD sans mises à jour d'horodatage

if not exist FileName.FileExtension copy NUL FileName.FileExtension

Powershell avec mises à jour d'horodatage

if (!(Test-Path FileName.FileExtension -PathType Leaf)) {New-Item FileName.FileExtension -Type file} else {(ls FileName.FileExtension ).LastWriteTime = Get-Date}

Oui, il fonctionnera dans la console comme une seule ligne; aucune obligation de le placer dans un fichier de script PowerShell.

PowerShell sans mises à jour d'horodatage

if (!(Test-Path FileName.FileExtension -PathType Leaf)) {New-Item FileName.FileExtension -Type file}

kayleeFrye_onDeck
la source
1
Qu'en est-il de la situation où le fichier existe et que vous souhaitez mettre à jour son horodatage de modification à l'heure actuelle? Je ne vois pas comment ces exemples y parviennent.
RoG
2
Grande observation, RoG! J'ai mis à jour la réponse pour résoudre ce problème :)
kayleeFrye_onDeck
C'est la meilleure réponse. Cependant, je l'améliorerais toujours en le remplaçant fsutil file CreateNew FileName.FileExtension 0par copy NUL Filename.FileExtension, car ce dernier est plus court et fait la même chose.
Keith Russell
@KeithRussell IIRC il y avait une raison spécifique , je n'ai pas utilisé copyplus fsutilmais il a été un moment ... Je suis sûr que ce que je même appris fsutilhaha! Je vais essayer de comprendre pourquoi ...
kayleeFrye_onDeck
1
Même s'ils se comportent de la même manière, je suppose qu'il est prématuré pour moi de dire que l'un est meilleur, sans test de vitesse.
Keith Russell
14

Utilisez la commande suivante sur votre ligne de commande:

fsutil file createnew filename  requiredSize

Les informations de paramètres comme suit:

fsutil - Utilitaire de système de fichiers (l'exécutable que vous exécutez)

file - déclenche une action de fichier

createnew - l'action à effectuer (créer un nouveau fichier)

filename - serait littéralement le nom du fichier

requiredSize - allouerait une taille de fichier en octets dans le fichier créé

Ofer Haber
la source
2
Certaines explications sont nécessaires pour que cela soit considéré comme une réponse décente. La signification de ces cinq mots n'est pas claire.
jfriend00
1
a fonctionné pour moi ... la chose requiredSize est bizarre cependant ... la commande remplit juste votre nouveau fichier avec des milliers de NULLs ... bizarre ... alors utilisez simplement 0 ... génère une erreur si vous sautez le requiredSize .. .
dsdsdsdsd
1
cette commnad a besoin des privilèges d'administrateur :(
ADJ
1
touch met également à jour l'horodatage des fichiers existants, et ne crée pas seulement de nouveaux fichiers.
Denise Skidmore
1
touch est un moyen rapide de le faire, le plus proche serait l'écho ou le type, je suppose, bien que ce soit un outil très pratique pour les scripts et largement utilisé dans WS16, bravo! docs.microsoft.com/en-us/windows-server/administration/…
Alan
10

Sur Windows Power Shell, vous pouvez utiliser la commande suivante:

New-Item <filename.extension>

ou

New-Item <filename.extension> -type file

Remarque: New-Item peut être remplacé par son alias ni

Raghuveer
la source
1
C'est la vraie réponse dans le monde Windows d'aujourd'hui où PowerShell est le programme shell de commande par défaut.
RBT
Je ne sais pas à quoi vous faites référence, je viens d'installer un nouveau Windows 10 et Powershell n'est certainement pas le shell par défaut. 'New-Item' is not recognized as an internal or external command
user5359531
8

Vous pouvez reproduire la fonctionnalité de touch avec la commande suivante:

$>>filename

Cela tente d'exécuter un programme appelé $, mais s'il $n'existe pas (ou n'est pas un exécutable qui produit une sortie), aucune sortie n'est produite par celui-ci. Il s'agit essentiellement d'un piratage de la fonctionnalité, mais vous obtiendrez le message d'erreur suivant:

«$» n'est pas reconnu comme une commande interne ou externe, un programme utilisable ou un fichier de commandes.

Si vous ne voulez pas le message d'erreur, vous pouvez faire l'une des deux choses suivantes:

type nul >> filename

Ou:

$>>filename 2>nul

le type commande tente d'afficher le contenu de nul, ce qui ne fait rien mais renvoie un EOF (fin de fichier) lors de la lecture.

2>nulenvoie la sortie d'erreur (sortie 2) à nul (qui ignore toutes les entrées lors de l'écriture). Évidemment, la deuxième commande (avec 2>nul) est rendue redondante par la typecommande car elle est plus rapide à taper. Mais au moins, vous avez maintenant l'option et les connaissances.

Keldon Alleyne
la source
C'est génial, mais il est %ERRORLEVEL%toujours différent de zéro. Vous pouvez résoudre ce problème en ajoutant un noop || cd., mais cela définit toujours l'erreur sur 0, ce qui peut ne pas être ce que vous voulez si le «toucher» échoue.
Keith Russell
5

Pas de commande - ni typeniecho - n'est nécessaire pour émuler la commande 'touch' d'Unix / Mac OS X dans un terminal Windows Powershell. Utilisez simplement le raccourci suivant:

$null > filename

Cela créera un fichier vide nommé 'filename' à votre emplacement actuel. Utilisez toute extension de nom de fichier dont vous pourriez avoir besoin, par exemple «.txt».

Source: /superuser/502374/equivalent-of-linux-touch-to-create-an-empty-file-with-powershell (voir commentaires)

Oliver Schafeld
la source
1
il semble que vous ayez manquéecho
sabithpocker
@sabithpocker dans Windows cmd, $ null n'existe pas et comme il n'existe pas, il ne produit aucune sortie. Vous $null > filenameenvoyez cette sortie vide à filename (si vous attrapez ma dérive).
Keldon Alleyne
1
@sabithpocker Dans Windows Powershell, cela fonctionne sans echoDans le terminal de ligne de commande standard (cmd) dont vous avez besoin echo. Désolé pour la confusion.
Oliver Schafeld
@OliverSchafeld et Keldon Merci pour l'explication.
sabithpocker
1
Cela ajoute une nomenclature au fichier.
kayleeFrye_onDeck
3

Vous pouvez également utiliser copy con [filename] dans une fenêtre de commande Windows (cmd.exe):

C:\copy con yourfile.txt [enter]
C:\CTRL + Z [enter] //hold CTRL key & press "Z" then press Enter key.
^Z
    1 Files Copied.

Cela créera un fichier nommé yourfile.txtdans le répertoire local.

delliottg
la source
3

comme mentionné

echo >> index.html

ça peut être n'importe quel fichier, avec n'importe quelle extension alors faites

notepad index.html

cela ouvrira votre fichier dans l'éditeur de bloc-notes

Boris
la source
3

J'utilise cmder(un émulateur de ligne de commande)

Il vous permet d'exécuter toutes les commandes Linux à l'intérieur d'une machine Windows.

Il peut être téléchargé sur https://cmder.net/

J'aime vraiment ça

user1880531
la source
1
que se passe-t-il avec l'avertissement "Éditeur inconnu" lorsque j'essaye d'ouvrir Cmder dans win10? Bummer.
Chris22
2

En supposant que le fichier existe et qu'il vous suffit de mettre à jour l'horodatage.

type test.c > test.c.bkp && type test.c.bkp > test.c && del test.c.bkp
Anoop Kumar Narayanan
la source
2

Depuis le terminal de Visual Code Studio sous Windows 10, voici ce qui a fonctionné pour moi pour créer un nouveau fichier:

type > hello.js
echo > orange.js
ni > peach.js
eimn
la source
1

Si Cygwin est installé sur votre PC, vous pouvez simplement utiliser l'exécutable fourni pour le toucher (également via l'invite de commande Windows):

C:\cygwin64\bin\touch.exe <file_path>
Uri Ziv
la source
-1

Facile, exemple avec un fichier txt

echo $null >> filename.txt
Thiago Maciel
la source
Ajoute $nullau fichier.
Tomáš Zato - Réintégrer Monica le
-1

Oui, vous pouvez utiliser Node for Touch Je viens de l'utiliser et cela fonctionne très bien dans Windows Cmd ou gitbash

entrez la description de l'image ici

Asad Iftikhar
la source
Je n'ai pas voté contre cela, mais je vais expliquer pourquoi c'était probablement le cas. Cette question a été balisée avec [cmd], et cela implique que l'OP veut une réponse prête à l'emploi pour CMD, c'est-à-dire pas d'utilitaires de ligne de commande qui ne sont pas fournis avec une installation Windows par défaut. Cela exclura pratiquement tous les langages de script, même les langages de script Windows intégrés tels que CScript, WScript et PowerShell. Le fait n'est pas que cela fonctionne dans l'environnement CMD, mais que c'est possible pour toute personne ayant accès à CMD, sans compter les problèmes d'autorisations.
kayleeFrye_onDeck