Comment créer un fichier texte vide à partir d'un fichier batch?

244

Quelqu'un peut-il se rappeler quelle était la commande pour créer un fichier vide dans MSDOS en utilisant le fichier BAT?

m_pGladiator
la source
3
Également sur stackoverflow.com/questions/1702762 , "Comment créer un fichier vide sur la ligne de commande?".
Peter Mortensen
6
Vous ne confondez pas DOS et cmd.exe, n'est-ce pas?
utilisateur inconnu
LISEZ-MOI: Set-Content "your_file.txt" .gitignore -Encoding utf8ceci est sensible à la casse et force le codage utf8! (J'ai également posté cela comme réponse).
Wolfpack'08

Réponses:

235
echo. 2>EmptyFile.txt
Le Schtroumpf
la source
49
Cela fait écho à une nouvelle ligne à stdout, cependant ... ma réponse ne le fait pas.
éphémère
7
Parfois, c'est pertinent; J'avais l'habitude d'avoir des contacts qui traînaient jusqu'à ce que j'aie l'idée de copier simplement NUL (ou tapez NUL> fichier) dans le but d'obtenir des fichiers de 0 octet. :-)
Joey
18
Pour fusionner la réponse de l'éphémient et celle-ci, vous pouvez faire: "echo.> NUL 2> EmptyFile.txt" pour obtenir les mêmes résultats sans générer de nouvelle ligne
cmptrgeekken
7
Pourquoi est - .àecho.
Ninh Pham
3
@Reegan Si vous l'utilisiez echo 2sans ., la console afficherait "ECHO est désactivé". Utiliser echo. 2efficacement la sortie de la console au silence en affichant uniquement une nouvelle ligne.
OneManBand
362
copier NUL EmptyFile.txt

DOS a quelques fichiers spéciaux (périphériques, en fait) qui existent dans chaque répertoire, NULétant l'équivalent d'UNIX /dev/null: c'est un fichier magique qui est toujours vide et jette tout ce que vous y écrivez. Voici une liste de quelques autres; CONest parfois utile aussi.

Pour éviter toute sortie, vous pouvez utiliser

copy / y NUL EmptyFile.txt> NUL

/yempêche copyde poser une question que vous ne pouvez pas voir lorsque la sortie est envoyée NUL.

éphémère
la source
36
+1 - la question indique un fichier vide , donc la réponse acceptée est fausse.
Joe
9
La solution de DannySmurf crée en fait un fichier vide - une nouvelle ligne va à stdout, rien ne va à stderr (dirigé dans le nouveau fichier). Mais merci pour le +1 de toute façon
éphémère
2
type nul> EmptyFile.txt est la solution la plus courte. Votre réponse est toujours meilleure que la solution acceptée, car votre fichier sera vraiment vide. +1
TPAKTOPA du
3
Avertissement: oui, la question était de savoir comment créer un fichier vide, mais vous voulez généralement "vous assurer que le fichier existe". Lorsque vous utilisez la copy /Y NULcommande, elle peut effacer le contenu existant. Si vous êtes habitué à la touchcommande Unix , ce n'est peut-être pas du tout ce que vous attendez.) L'utilisation type NUL >> emptyfile.txtest plus sûre à cet égard.
eckes
Je n'ai pu trouver aucune information sur CON, à part celle liée dans cette réponse. Quelqu'un pourrait-il partager une lecture légère?
Sinjai
182
type NUL > EmptyFile.txt

Après avoir lu les deux messages précédents, ce mélange des deux est ce que j'ai trouvé. Cela semble un peu plus propre. Vous n'avez pas à vous soucier de rediriger les "1 fichier (s) copié (s)". message NUL, comme le post précédent fait, et il semble bien à côté de la ECHO OutputLineFromLoop >> Emptyfile.txtqui suivent habituellement dans un fichier batch.

Kevin K
la source
13
+1 c'est le naturel qui vient à l'esprit en premier, pas les artifices avec stderr etc.
Amit Naidu
2
Vous avez raison. Cette méthode évite l'indicateur / y sur la commande de copie.
djangofan
Court et facile. Quelques autres solutions ici ne créent pas un nouveau fichier de zéro octet!
Christian
66

Techniques que j'ai recueillies à partir d'autres réponses:

Rend un fichier de 0 octet d' une manière très claire et rétrocompatible:

type nul >EmptyFile.txt

idée via: anonyme , Danny Backett , peut-être d'autres, moi-même inspiré par le travail de JdeBP

Un fichier de 0 octet d'une autre manière , il est rétrocompatible:

REM. >EmptyFile.txt

idée via: Johannes

Un fichier de 0 octet à la troisième manière rétrocompatible:

echo. 2>EmptyFile.txt

idée via: TheSmurf

Un fichier de 0 octet de la manière systématique probablement disponible depuis Windows 2000:

fsutil file createnew EmptyFile.txt 0

idée via: Emm

Un fichier de 0 octet écrasant les fichiers en lecture seule

ATTRIB -R filename.ext>NUL
(CD.>filename.ext)2>NUL

idée via: copyitright

Un seul saut de ligne (2 octets: 0x0D 0x0Aen notation hexadécimale , alternativement écrit comme \r\n):

echo.>AlmostEmptyFile.txt

Remarque: aucun espace entre echo, .et >.

idée via: Comment faire écho à une nouvelle ligne dans des fichiers batch?


edit Il semble que toute commande invalide redirigée vers un fichier crée un fichier vide. heh, une fonctionnalité! compatibilité: uknown

TheInvisibleFeature <nul >EmptyFile.txt

Un fichier de 0 octets: commande invalide / avec un nom aléatoire (compatibilité: uknown):

%RANDOM%-%TIME:~6,5% <nul >EmptyFile.txt

via: une excellente source pour le hasard par Hung Huynh

modifier 2 Andriy M souligne la façon probablement la plus amusante / provocante d'y parvenir via une commande invalide

Un fichier de 0 octets: commande invalide / façon funky (compatibilité: inconnue)

*>EmptyFile.txt

idée via: Andriy M

A 0 octets voie 4ème à venir fichier :

break > file.txt

idée via: foxidrive grâce au commentaire de Double Gras !

n611x007
la source
En fait type nul ..., non type <nul ....
Andriy M
@AndriyM merci vous avez raison j'ai fait le montage! Je ne l'ai pas remarqué car assez intéressant, cela fonctionne avec le mauvais. ce qui peut signifier que toute commande invalide redirigée vers un nom de fichier créerait un fichier vide! juste essayé avec NonExistentCommand <nul >EmptyFile.txtet cela a fonctionné
n611x007
comme il ne serait pas sûr de s'appuyer sur un nom de commande codé en dur s'attendant à ce qu'il soit "invalide", j'ai ajouté une option de nom de commande aléatoire
n611x007
2
Encore un autre :,break > file.txt accessoires foxidrive
Gras Double
3
Et la plupart des commandes peuvent être utilisées avec >>si vous avez besoin "doivent exister mais ne doivent pas être tronquées si elles existent" (comme le fait Unix touch)
eckes
25

REM. > empty.file

Johannes
la source
Je suis bloqué sur Windows CE, et c'est la seule réponse qui crée et vide un fichier! Les autres approches ajoutent une ligne vierge ou ne fonctionnent tout simplement pas ...
AntonyG
Le seul problème avec cette solution est que s'il y a un fichier appelé REM dans le répertoire courant et que vous tapez REM., cmd répondra par "'rem". n'est pas reconnu comme une commande interne ou externe, un programme exploitable ou un fichier de commandes. "
DodgyCodeException
@DodgyCodeException, en utilisant rem/au lieu de rem.résout ce problème ...
aschipfl
@aschipfl merci, c'est intéressant. Il est également intéressant de voir comment cette réponse de 2010 a des commentaires espacés les uns des autres de plusieurs années. Une conversation lentewwwwww!
DodgyCodeException
8

S'il existe une possibilité que le fichier à écrire existe déjà et soit en lecture seule, utilisez le code suivant:

ATTRIB -R filename.ext
CD .>filename.ext

Si aucun fichier n'existe, faites simplement:

CD .>filename.ext

(code mis à jour / modifié selon le commentaire de DodgyCodeException)

Pour supprimer les erreurs qui pourraient survenir:

ATTRIB -R filename.ext>NUL
(CD .>filename.ext)2>NUL
script'n'code
la source
1
Le seul problème avec cette solution est que s'il y a un fichier appelé CD(sans extension) dans le répertoire courant, et que vous tapez CD., cmd répondra avec "'CD' '. n'est pas reconnu comme une commande interne ou externe, un programme exploitable ou un fichier de commandes. " Si vous tapez à la place CD .(avec un espace avant le point), cela fonctionnera.
DodgyCodeException
7
fsutil file createnew file.cmd 0
Emm
la source
L'utilitaire FSUTIL requiert que vous disposiez de privilèges administratifs.
DodgyCodeException
fsutil n'est pas un utilitaire standard dans MS-DOS.
Bernhard Eriksson
7

Un de plus à ajouter aux livres - court et doux à taper.

break>file.txt
break>"file with spaces in name.txt"
Foxidrive
la source
Je suppose que nous woyld sauter les citations
Nam G VU
@NamGVU Les guillemets sont utilisés dans le nom de fichier cible, si vous choisissez d'utiliser des éléments de nom de fichier longs tels que l'espace ou etc. Ils ne font pas partie du contenu du fichier.
foxidrive
Oui, je suis d'accord ^^ Autorisation de mettre à jour le vôtre comme discuté.
Nam G VU
@NamGVU Les guillemets peuvent être laissés en place avec ou sans nom de fichier long. Je suppose que s'il est tapé à partir de la ligne de commande avec un nom de fichier court, vous ne voudriez pas taper inutile.
foxidrive
Je suggère de supprimer la deuxième ligne de cette réponse. IMO, c'est la meilleure réponse à la question jusqu'à présent, mais la deuxième ligne n'ajoute pas vraiment de valeur à moins que la personne qui essaie de l'utiliser ne connaisse pas les bases de la gestion des espaces blancs pour la ligne de commande.
kayleeFrye_onDeck
2

Vous pouvez utiliser une TYPEcommande au lieu de COPY. Essaye ça:

TYPE File1.txt>File2.txt

File1.txtest vide.

Kevin K
la source
3
Vous pouvez aussi fairetype NUL>File2.txt
Danny Beckett
6
BTW, comment obtenir File1.txt?
TomeeNS
1

Vous pouvez également utiliser SETpour créer un bytefichier nul comme suit

set x=x > EmptyFile.txt

Ou si vous ne voulez pas créer une variable supplémentaire, réaffectez une variable existante comme

set PROMPT=%PROMPT% > EmptyFile.txt

ou comme ça:

set "PROMPT=%PROMPT%" > EmptyFile.txt
PeterE
la source
0

Il existe des approches infinies.

Commandes qui ne produisent rien:

break
cls
color
goto
pushd
popd
prompt
title

Commandes étranges:

CD.
REM.
@echo off
cmd /c
START >FILE

La printcommande obsolète produit un fichier vierge:

print /d:EMPTY_TEXT_FILE nul
HackingAddict1337
la source
-2

Le moyen le plus simple est:

echo. > Filename.txt

Batchman
la source
8
Cela va créer un fichier avec un caractère espace suivi d'un caractère retour chariot suivi d'un nouveau caractère de ligne - pas un fichier vide.
Andriy M
Cela vaut la peine de regarder ma réponse (ci-dessous) car elle change l'encodage.
Wolfpack'08
-3

IMPORTANT:

Si vous ne définissez pas l'encodage, de nombreux logiciels peuvent se casser. git est un exemple très populaire.

Set-Content "your_ignore_file.txt" .gitignore -Encoding utf8 c'est sensible à la casse et force le codage utf8!

Wolfpack'08
la source
3
En quoi l'encodage est-il pertinent pour créer un fichier vide ? Un fichier d'octets nuls n'a pas besoin d'encodage et il est difficile de le marquer avec une nomenclature (0 octet)
jeb
@jeb car les gens remplissent des fichiers vides et lorsque les fichiers remplis sont utilisés comme fichiers de paramètres, ils créent des erreurs lorsqu'ils ne sont pas UTF8. En fait, je dirais que les gens remplissent presque toujours des fichiers et ne les laissent pas vides, et je n'utiliserais aucune autre méthode pour créer un fichier vierge que je comptais modifier plus tard, car je veux presque toujours être certain que mes fichiers sont UTF8. Par exemple, le tutoriel .git sur github demande à l'utilisateur de créer un fichier vierge qui sera rempli plus tard, et l'autre méthode crée un fichier avec un codage Windows étrange.
Wolfpack'08