Comment créer un fichier vide sur la ligne de commande sous Windows?

494

Comment créer un fichier vide sur la ligne de commande DOS / Windows?

J'ai essayé:

copy nul > file.txt

mais il affiche toujours qu'un fichier a été copié.

Existe-t-il une autre méthode dans la cmd standard?

Il doit s'agir d'une méthode qui ne nécessite pas la commande tactile de Cygwin ou toute autre commande non standard. La commande doit être exécutée à partir d'un script afin que les frappes ne puissent pas être utilisées.

Grendler
la source
Je viens de trouver une vraie commande batch aboutissant à un fichier vide (0 octet): j'ai mis à jour ma réponse.
VonC
3
Dupliquer: stackoverflow.com/questions/210201 , "Comment créer un fichier texte vide à partir d'un fichier batch?". (Mais, à mon humble avis, les réponses sont meilleures ici.)
Peter Mortensen
Oui, la commande copier nul> fichier.txt est créée avec le texte "1 fichier (s) copié". Le fichier vide n'est pas créé.
Ripon Al Wasim
5
Pour moi, cela prouve simplement que MS-DOS est une ordure si vous ne pouvez pas créer un fichier vide simple avec une seule commande.
Kolob Canyon
2
@KolobCanyon: vous pouvez, bien sûr, d'après les réponses déjà publiées. Mais pensez-vous vraiment que la possibilité de créer rapidement un fichier vide devrait être une priorité pour un système d'exploitation destiné aux utilisateurs finaux et devant s'exécuter dans 16 Ko de RAM? Ce n'est pas une chose particulièrement utile à faire, après tout, sauf dans quelques cas rares.
Harry Johnston

Réponses:

571

Sans redirection, Luc Vu ou Erik Konstantopoulos pointent sur à:

copy NUL EMptyFile.txt
copy /b NUL EmptyFile.txt

" Comment créer un fichier texte vide à partir d'un fichier batch? " (2008) indique également:

type NUL > EmptyFile.txt
# also
echo. 2>EmptyFile.txt
copy nul file.txt > nul # also in qid's answer below
REM. > empty.file
fsutil file createnew file.cmd 0 # to create a file on a mapped drive

Nomad en mentionne un original :

C:\Users\VonC\prog\tests>aaaa > empty_file
'aaaa' is not recognized as an internal or external command, operable program or batch file.

C:\Users\VonC\prog\tests>dir

 Folder C:\Users\VonC\prog\tests

27/11/2013  10:40    <REP>          .
27/11/2013  10:40    <REP>          ..
27/11/2013  10:40                 0 empty_file

Dans le même esprit, Samuel suggère dans les commentaires :

le plus court que j'utilise est essentiellement celui de Nomad:

.>out.txt

Cela donne une erreur:

'.' is not recognized as an internal or external command

Mais cette erreur est sur stderr. Et >redirige uniquement stdout, où rien n'a été produit.
D'où la création d'un fichier vide . Le message d'erreur peut être ignoré ici.


(Réponse originale, novembre 2009)

echo.>filename

( echo ""mettrait en fait "" dans le fichier! Et echosans le '.' mettrait " Command ECHO activated" dans le fichier ...)

Remarque: le fichier résultant n'est pas vide mais comprend une séquence de lignes de retour: 2 octets.


Cette discussion pointe vers une véritable solution batch pour un vrai fichier vide :

 <nul (set/p z=) >filename

 dir filename
 11/09/2009  19:45                 0 filename
 1 file(s)                         0 bytes

Le " <nul" envoie une nulréponse à la set/pcommande, ce qui fera que la variable utilisée restera inchangée. Comme d'habitude avec set/p, la chaîne à droite du signe égal s'affiche comme une invite sans CRLF.

Puisqu'ici la "chaîne à droite du signe égal" est vide ... le résultat est un fichier vide.


La différence avec cd. > filename(qui est mentionnée dans la réponse de Patrick Cuff et produit également un fichier de 0 octet) est que ce "bit de redirection" (l' <nul...astuce) peut être utilisé pour faire écho aux lignes sans CR :

<nul (set/p z=hello) >out.txt
<nul (set/p z= world!) >>out.txt
dir out.txt

La dircommande doit indiquer la taille du fichier sous forme de 11 octets: " helloworld!".

VonC
la source
2
vous voudriez réellement echo.>filenameparce qu'il inclura l'espace aussi bien que le caractère de nouvelle ligne.
Agent_9191
1
L'utilisation de la remcommande évite de créer un fichier contenant une ligne vide.
Greg Hewgill
@ Agent_9191: vrai, j'ai mis à jour ma réponse. @Greg: pas sûr de ce que vous voulez dire: rem>filenameproduit le même résultat (2 octets)
VonC
3
Noufal Ibrahim: ne vous laissez pas tromper; voyez juste la réponse suivante qui a une solution beaucoup plus facile et tout aussi efficace. Ce qui est fait ici est partiellement faux dans le premier cas (pas vide mais contient un saut de ligne) et trop compliqué dans le second.
Joey
1
@barlop Oui: c'est le point: il déclenche un message d'erreur sur stderr, mais rien (chaîne vide) sur stdout. Et >redirigez stdout uniquement vers out.txt. D'où la création d'un fichier vide. Vous pouvez ignorer le message d'erreur dans ce contexte.
VonC
270

Essaye ça:

type NUL > 1.txt

cela va certainement créer un fichier vide.

Justin
la source
Cela ajoute "NUL is ./NUL" au fichier
dshgna
106

Voici une autre façon:

cd. > filename
Patrick Cuff
la source
11
cd. > filenamece n'est pas du travail pour moi au lieu de cd > filename travaux!
NaveenDA
3
"cd.> nom de fichier" crée un fichier vide sinon vous aurez un chemin de fichier imprimé dans votre fichier nouvellement créé en utilisant la commande "cd> nom de fichier".
niketan
6
Utilisez ceci: ce qui cd . > filename.extensionsignifie que vous avez besoin d'un espace entre cdet.
AIon
77

Si vous voulez vraiment un fichier totalement vide, sans sortie vers stdout, vous pouvez tricher un peu:

copy nul file.txt > nul

Redirigez simplement stdout vers nul et la sortie de la copie disparaît.

qid
la source
1
Il échoue si le fichier.txt existe.
Grendler
6
Ne pas réussir si le fichier existe est un bon comportement si je comprends bien la question.
wallyk
32
+1. C'est incroyable de voir à quel point la réponse acceptée est quelque chose de moitié faux et de demi alambiqué alors que la réponse évidemment correcte n'obtient presque aucun crédit. Pour ajouter à cela: type nul>fileserait une autre façon.
Joey
@Joey l'accepté a un tas de solutions qui fonctionnent pour créer un fichier vide de 0 octet.
barlop du
2
@barlop: Pour référence, ce fut la réponse acceptée au moment où un commentaire a été écrit. Je ne reçois pas de notification chaque fois qu'une réponse change, je fais référence dans un commentaire.
Joey
48

Fichier ouvert :

type file.txt

Nouveau fichier :

Way 1 : type nul > file.txt
Way 2 : echo This is a sample text file > sample.txt
Way 3 : notepad myfile.txt <press enter>

Modifier le contenu:

notepad file.txt

Copie

copy file1.txt file1Copy.txt

Renommer

rename file1.txt file1_rename.txt

Supprimer le fichier :

del file.txt
iCrazybest
la source
Belle vue d'ensemble des commandes cmd
KargWare
32

En lisant les commentaires sur mon post, je dois admettre que je n'ai pas bien lu la question.

Sur la ligne de commande Windows, une façon serait d'utiliser fsutil :

fsutil file createnew <filename> <size>

Un exemple:

fsutil file createnew myEmptyFile.txt 0

Ci-dessous est pour la ligne de commande * nix.

touch filename

Cette commande change la date de modification d'un fichier ou la crée si le fichier n'est pas trouvé.

nash
la source
Malheureusement, la question précise: «Sans la commande tactile de Cygwin».
qid
3
Il existe des implémentations non Cygwin de la commande tactile: unxutils.sourceforge.net est bon.
Greg Hewgill
Dans * nix, je suis personnellement partisan d'un simple > filename, qui peut également être utilisé pour tronquer un fichier existant.
Frank Farmer
fsutila besoin de privilèges administratifs. C'est un peu trop demander de simplement créer un fichier vide ...
Joey
@Joey N'est-ce pas toutes ces commandes un peu trop pour créer un fichier vide? Même celui ci-dessous avec 120 points est beaucoup lorsque vous avez l'habitude de toucher.
johnny
29
echo "" > filename

Je crois que cela fonctionne sur Windows / DOS, mais ma dernière expérience pratique avec l'un ou l'autre remonte à un certain temps. Je sais pertinemment que cela fonctionne sur pratiquement n'importe quel système d'exploitation compatible POSIX .

Kris
la source
2
En apparence, la réponse de VonC est meilleure que la mienne, alors s'il vous plaît, votez plutôt à la place.
Kris
3
Malheureusement: echo "" affiche des guillemets doubles et ils sont écrits dans le fichier lorsque le flux y est redirigé. La même chose se produit avec juste: echo> nom de fichier car il écrit que ECHO est également activé / désactivé dans le fichier.
Grendler
peut-être pourriez-vous mettre "@echo off" sur la ligne avant de créer le fichier pour contourner cela?
Kris
27
call>file.txt

c'est la façon la plus propre que je connaisse.

nephi12
la source
Qu'est-ce qui est "propre"?
GreenAsJade
4
il ne sort rien dans le fichier tout en étant facile à mémoriser et à utiliser.
nephi12
C'était la solution la plus simple qui fonctionne et la plus facile à retenir.
nhershy
12
cd > filename.cfg 

travaillé lors de la création d'un fichier dans C: / Program Files où vous n'avez pas accès pour créer directement des fichiers.

Subhashi
la source
11

Vous pouvez écrire votre propre touche.

//touch.cpp
#include <fstream>
#include <iostream>

int main(int argc, char ** argv;)
{
  if(argc !=2)
  {
    std::cerr << "Must supply a filename as argument" << endl;
    return 1;
  }
  std::ofstream foo(argv[1]);
  foo.close();
  return 0;
}
Paul Nathan
la source
6

copie avec SomeFile.txt Enter

Ctrl-Z Enter

DRapp
la source
J'ai précisé la question que la commande s'exécutera à partir du script, donc malheureusement, toute interaction avec le clavier ne fonctionne pas. Merci quand même.
Grendler
6

Encore une autre méthode qui crée un fichier zéro octet:

break > "file.txt"
Foxidrive
la source
6

vous pouvez donc créer un fichier vide avec

'' > newfile.txt

accédez au répertoire et tapez la commande ci-dessus dans la fenêtre PowerShell.

Notez que cela ne fonctionnera pas sur l'invite de commande Windows.

Aswin 1054
la source
5

Essayez ceci: abc > myFile.txt Tout d'abord, il créera un fichier avec un nom myFile.txtdans le répertoire de travail actuel (dans l'invite de commande). Ensuite, il exécutera la commande abcqui n'est pas une commande valide. De cette façon, vous avez obtenu un nouveau fichier vide avec le nom myFile.txt.

Nomade
la source
2
Cela pourrait être très faux si se abctrouvait dans le chemin d'accès et était une fonction pratique pour formater tous les disques sauf le répertoire d'installation.
Bleeding Fingers
5

type nul>filename va créer un nouveau fichier vide.

Veillez excuser mon retard.

MISE À JOUR : Fonctionne également copy nul filenamesans redirection (solution plus évidente).

EKons
la source
5

Utiliser copy > your_file_name.extensiondans l'invite de commande comme

P:\excecise> copy > Sample.txt
Raj Kumar Mishra
la source
4

Vous pouvez également utiliser:

echo. 2>foo

La sortie de débogage pour echo.sera presque certainement vide.

Craig
la source
4

J'ai lu beaucoup de discussions mais ce n'est pas le chemin le plus court.

Veuillez utiliser la commande:

>copy /b NUL empty_file.txt

suhao399
la source
4

Vous pouvez utiliser l'ancienne commande

copy con file_name.ext

ne tapez rien, appuyez simplement sur F6 pour l'enregistrer, mais il affichera "Fichier copié", mais lorsque vous ouvrirez le fichier, il sera vide

Amado Saladino
la source
4

Pour créer tout type de fichier, vous pouvez utiliser le code suivant

tapez nul> (nom_fichier). (type_fichier)

Par exemple. Si vous souhaitez créer un fichier texte,

type nul> demo.txt

Si vous souhaitez créer un fichier javascript, alors

type nul> demo.js

Darshan Jain
la source
3

Cela a fonctionné pour moi,

echo > file.extension

Voici une autre façon que j'ai trouvée aujourd'hui, j'ai obtenu des idées d'autres réponses, mais cela a fonctionné

sometext > filename.extension

Par exemple.

xyz > emptyfile.txt  //this would create an empty zero byte text file
abc > filename.mp4   //this would create an zero byte MP4 video media file

Cela afficherait un message d'erreur dans l'invite de commande qui,

xyz n'est pas une commande interne ou externe, un programme exploitable ou un fichier de commandes.

Mais la chose étrange que j'ai trouvée était que le fichier est créé dans le répertoire même si la commande n'est pas une commande Windows standard.

Chanceux
la source
1
Il existe plusieurs "descripteurs" auxquels les applications de console peuvent lire / écrire. Les standards sont: (0) STDIN, (1) STDOUT et (2) STDERR. Je crois que la raison pour laquelle votre astuce fonctionne ici est que toute la sortie va au gestionnaire d'erreur, mais vous ne dirigez que STDOUT vers le fichier. Essayez de faire: "xyz> emptyfile.txt 2> & 1" pour rediriger STDERR vers ce que STDOUT utilise, qui se trouve être en train de rediriger vers "emptyfile.txt". Vous devriez maintenant voir le message d'erreur dans ce fichier.
Brent Rittenhouse
3

Essaye ça:

echo $null >> filename 

Voir: superUser

shireef khatab
la source
3

Sous Windows j'ai essayé de le faire

echo off > fff1.txt

et il a créé un fichier nommé fff1.txt avec une taille de fichier de 0 Ko

Je n'ai trouvé aucune autre commande que celle-ci qui pourrait créer un fichier vide.

Remarque: Vous devez être dans le répertoire dans lequel vous souhaitez créer le fichier.

Omkar Agrawal
la source
n'oubliez pas de faire écho après avoir créé le fichier si vous en avez besoin.
QMaster
Cette commande fige la cmd après avoir cliqué sur ENTRÉE.
Kavin Raju S
Je ne sais pas pourquoi il le fait, mais je suppose que vous devriez faire "echo on" après avoir entré la commande ci-dessus.
Omkar Agrawal
3

Encore une autre façon:

copy nul 2>empty_file.txt
GadBro
la source
2

J'ai juste essayé sous Windows

copy con file.txt

puis appuyez sur la Entertouche puis appuyez surCtrl+Z Enter

Et ça a marché pour moi.

Pour Ubuntu, je crée généralement un fichier à l'aide de la commande VI

vi file.txt

Il ouvrira le fichier puis appuyez sur la ESCtouche puis tapez : wp puis appuyez sur la entertouche. Il créera un nouveau fichier avec des données vides.

ARJUN KP
la source
2
  • créer un fichier bat avec du contenu echo '' > %1. (nommez le fichier touch.bat)
  • ajoutez le dossier à la variable PATH.
  • vous pouvez utiliser le toucher pour créer des fichiers. (Ex: touch temp.txtcrée le fichier temp.txt)

consultez cet article pour plus d'informations.

Pranay Kumar
la source
1

Aujourd'hui, j'en ai découvert un nouveau :)

Cela changera le titre de la fenêtre de ligne de commande, mais créera également un fichier vide.

title > file.txt
ninix
la source
1

Exécutez CMD en mode administrateur et saisissez ceci:

NUL > file_name.extention

ou vous tapez ceci

echo .> file_name.extention
Lekens
la source
1

Voici encore une autre façon:

rem/ > file.ext

La barre oblique /est obligatoire; sans elle, la partie de redirection a été commentée par rem.

aschipfl
la source
0

Créez d'abord votre fichier pour qu'il existe:

echo . > myfile.txt

Remplacez ensuite le fichier créé par une version vide à l'aide de la copycommande:

copy /y nul myfile.txt
Dowopfan
la source