Wie erstelle ich eine leere Textdatei aus einer Batchdatei?

244

Kann sich jemand erinnern, was der Befehl war, eine leere Datei in MSDOS mithilfe der BAT-Datei zu erstellen?

m_pGladiator
quelle
3
Ebenfalls unter stackoverflow.com/questions/1702762 , "Wie erstelle ich eine leere Datei in der Befehlszeile?".
Peter Mortensen
6
Sie verwirren DOS nicht und cmd.exe?
Benutzer unbekannt
LESEN SIE MICH: Set-Content "your_file.txt" .gitignore -Encoding utf8Dies unterscheidet zwischen Groß- und Kleinschreibung und erzwingt die utf8-Codierung! (Ich habe dies auch als Antwort gepostet).
Wolfpack'08

Antworten:

235
echo. 2>EmptyFile.txt
Der Schlumpf
quelle
49
Dies spiegelt jedoch eine neue Zeile für stdout wider ... meine Antwort tut dies nicht.
Ephemient
7
Manchmal ist es relevant; Früher lag die Berührung herum, bis ich auf die Idee kam, nur NUL zu kopieren (oder NUL> Datei einzugeben), um 0-Byte-Dateien zu erhalten. :-)
Joey
18
Um die Antwort von Ephemient und diese zusammenzuführen, können Sie Folgendes tun: "echo.> NUL 2> EmptyFile.txt", um dieselben Ergebnisse zu erzielen, ohne eine neue
Zeile
7
Warum ist .inecho.
Ninh Pham
3
@Reegan Wenn Sie echo 2ohne das verwenden ., würde die Konsole "ECHO ist aus" anzeigen . Durch die echo. 2effektive Verwendung wird die Konsolenausgabe stummgeschaltet, indem nur eine neue Zeile angezeigt wird.
OneManBand
362
Kopieren Sie NUL EmptyFile.txt

DOS hat einige spezielle Dateien (eigentlich Geräte), die in jedem Verzeichnis vorhanden sind NULund den UNIX- Dateien entsprechen /dev/null: Es ist eine magische Datei, die immer leer ist und alles wegwirft, was Sie darauf schreiben. Hier ist eine Liste einiger anderer; CONist gelegentlich auch nützlich.

Um überhaupt keine Ausgabe zu haben, können Sie verwenden

copy / y NUL EmptyFile.txt> NUL

/yverhindert, copydass eine Frage gestellt wird, die Sie nicht sehen können, wenn die Ausgabe an geht NUL.

kurzlebig
quelle
36
+1 - Die Frage enthält eine leere Datei, daher ist die akzeptierte Antwort falsch.
Joe
9
Die Lösung von DannySmurf erstellt tatsächlich eine leere Datei - eine neue Zeile geht an stdout, nichts geht an stderr (in die neue Datei gerichtet). Aber trotzdem danke für die +1
ephemient
2
Typ nul> EmptyFile.txt ist die kürzeste Lösung. Trotzdem ist Ihre Antwort besser als die akzeptierte Lösung, da Ihre Datei wirklich leer ist. +1
TPAKTOPA
3
Warnung: Ja, die Frage war, wie eine leere Datei erstellt werden soll. Normalerweise möchten Sie jedoch "sicherstellen, dass die Datei vorhanden ist". Bei Verwendung des copy /Y NULBefehls werden möglicherweise vorhandene Inhalte gelöscht. Wenn Sie an den touchBefehl von Unix gewöhnt sind, entspricht dies möglicherweise überhaupt nicht Ihren Erwartungen.) Die Verwendung type NUL >> emptyfile.txtist in dieser Hinsicht sicherer.
eckes
CONAbgesehen von den in dieser Antwort verlinkten Informationen konnte ich keine finden . Könnte jemand eine leichte Lektüre teilen?
Sinjai
182
type NUL > EmptyFile.txt

Nachdem ich die beiden vorherigen Beiträge gelesen habe, habe ich mir diese Mischung aus beiden ausgedacht. Es scheint ein bisschen sauberer. Sie müssen sich keine Gedanken über die Umleitung der "1 kopierten Datei (en)" machen. Nachricht an NUL, wie im vorherigen Beitrag, und es sieht gut aus neben der ECHO OutputLineFromLoop >> Emptyfile.txt, die normalerweise in einer Batch-Datei folgt.

Kevin K.
quelle
13
+1 Dies ist die natürliche, die zuerst in den Sinn kommt, nicht die Geräte mit stderr usw.
Amit Naidu
2
Du hast Recht. Diese Methode vermeidet das Flag / y im Kopierbefehl.
Djangofan
Kurz und einfach. Einige andere Lösungen erstellen hier keine neue Datei mit null Bytes!
Christian St.
66

Techniken, die ich aus anderen Antworten zusammengetragen habe:

Macht eine 0-Byte-Datei sehr klar und abwärtskompatibel:

type nul >EmptyFile.txt

Idee über: anonym , Danny Backett , möglicherweise andere, ich selbst inspiriert von JdeBPs Arbeit

Eine 0-Byte-Datei ist anders ausgedrückt abwärtskompatibel:

REM. >EmptyFile.txt

Idee über: Johannes

Eine 0-Byte-Datei 3. Weg auch abwärtskompatibel:

echo. 2>EmptyFile.txt

Idee über: TheSmurf

Eine 0-Byte-Datei, die wahrscheinlich seit Windows 2000 systematisch verfügbar ist:

fsutil file createnew EmptyFile.txt 0

Idee über: Emm

Eine 0-Byte-Datei, die schreibgeschützte Dateien überschreibt

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

Idee via: copyitright

Eine einzelne neue Zeile (2 Bytes: 0x0D 0x0Ain hexadezimaler Schreibweise , alternativ geschrieben als \r\n):

echo.>AlmostEmptyFile.txt

Hinweis: kein Raum zwischen echo, .und >.

Idee über: Wie können Sie einen Zeilenumbruch in Batch-Dateien wiedergeben?


Bearbeiten Es scheint, dass jeder ungültige Befehl, der in eine Datei umgeleitet wird , eine leere Datei erstellen würde. heh, ein Feature! Kompatibilität: unbekannt

TheInvisibleFeature <nul >EmptyFile.txt

Eine 0-Byte-Datei: ungültiger Befehl / mit einem zufälligen Namen (Kompatibilität: unbekannt):

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

via: tolle Quelle für Zufall von Hung Huynh

edit 2 Andriy M weist auf den wahrscheinlich amüsantesten / provokantesten Weg hin, dies über einen ungültigen Befehl zu erreichen

Eine 0-Byte-Datei: ungültiger Befehl / Funky Way (Kompatibilität: unbekannt)

*>EmptyFile.txt

Idee über: Andriy M.

Eine 0-Byte-Datei 4. kommender Weg :

break > file.txt

Idee via: foxidrive dank Kommentar von Double Gras !

n611x007
quelle
Es ist type nul ..., nicht type <nul ..., eigentlich.
Andriy M
@AndriyM danke du hast recht ich habe die Bearbeitung gemacht! Ich habe es nicht bemerkt, weil es interessanterweise mit dem falschen funktioniert. Dies kann bedeuten, dass jeder ungültige Befehl, der in einen Dateinamen umgeleitet wird, eine leere Datei erstellt! NonExistentCommand <nul >EmptyFile.txt
Ich habe
Da es unsicher wäre, sich auf einen fest codierten Befehlsnamen zu verlassen, der erwartet, dass er "ungültig" ist, habe ich eine zufällige Befehlsnamenoption hinzugefügt
n611x007
2
Noch eine : break > file.txt, Requisiten foxidrive
Gras Double
3
Und die meisten Befehle können verwendet werden, >>wenn Sie "müssen vorhanden sein, sollten aber nicht abgeschnitten werden, wenn vorhanden" (wie es Unix touchtut)
eckes
25

REM. > empty.file

Johannes
quelle
Ich stecke unter Windows CE fest und dies ist die einzige Antwort, die eine leere Datei erstellt! Die anderen Ansätze fügen entweder eine leere Zeile hinzu oder funktionieren einfach nicht ...
AntonyG
Das einzige Problem bei dieser Lösung besteht darin, dass REM.cmd mit "'rem' antwortet , wenn sich im aktuellen Verzeichnis eine Datei namens REM befindet und Sie eingeben. wird nicht als interner oder externer Befehl, bedienbares Programm oder Batchdatei erkannt. "
DodgyCodeException
@DodgyCodeException, mit rem/anstatt rem.dieses Problem zu lösen ...
aschipfl
@aschipfl danke, das ist interessant. Interessant ist auch, wie diese Antwort aus dem Jahr 2010 Kommentare enthält, die mehrere Jahre voneinander entfernt sind. Ein langsames Gespräch!
DodgyCodeException
8

Wenn die Möglichkeit besteht, dass die zu schreibende Datei bereits vorhanden und schreibgeschützt ist, verwenden Sie den folgenden Code:

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

Wenn keine Datei vorhanden ist, gehen Sie einfach wie folgt vor:

CD .>filename.ext

(Code gemäß DodgyCodeException-Kommentar aktualisiert / geändert)

So unterdrücken Sie eventuell auftretende Fehler:

ATTRIB -R filename.ext>NUL
(CD .>filename.ext)2>NUL
script'n'code
quelle
1
Das einzige Problem bei dieser Lösung besteht darin, dass cmd mit "CD" antwortet , wenn sich CDim aktuellen Verzeichnis eine Datei mit dem Namen (keine Erweiterung) befindet und Sie CD.eingeben. wird nicht als interner oder externer Befehl, bedienbares Programm oder Batchdatei erkannt. " Wenn Sie stattdessen CD .(mit einem Leerzeichen vor dem Punkt) eingeben, funktioniert dies.
DodgyCodeException
7
fsutil file createnew file.cmd 0
Emm
quelle
Das Dienstprogramm FSUTIL erfordert Administratorrechte.
DodgyCodeException
fsutil ist kein Standarddienstprogramm unter MS-DOS.
Bernhard Eriksson
7

Eine weitere, die Sie den Büchern hinzufügen können - kurz und bündig zum Tippen.

break>file.txt
break>"file with spaces in name.txt"
foxidrive
quelle
Ich denke, wir würden die Zitate überspringen
Nam G VU
@NamGVU Die Anführungszeichen werden im Zieldateinamen verwendet, wenn Sie lange Dateinamenelemente wie Leerzeichen oder & usw. verwenden. Sie sind nicht Teil des Dateiinhalts.
foxidrive
Ja, ich stimme zu ^^ Erlaubnis, deine wie besprochen zu aktualisieren.
Nam G VU
@NamGVU Die Anführungszeichen können mit oder ohne langen Dateinamen beibehalten werden. Ich denke, wenn es über die Befehlszeile mit einem kurzen Dateinamen eingegeben wird, möchten Sie keine unnötige Eingabe.
foxidrive
Ich schlage vor, die zweite Zeile aus dieser Antwort zu entfernen. IMO ist dies die beste Antwort auf die Frage, aber die zweite Zeile bietet keinen wirklichen Mehrwert, es sei denn, die Person, die versucht, sie zu verwenden, kennt die Grundlagen der Leerraumbehandlung für die Befehlszeile nicht.
KayleeFrye_onDeck
2

Sie können einen TYPEBefehl anstelle von verwenden COPY. Versuche dies:

TYPE File1.txt>File2.txt

Wo File1.txtist leer.

Kevin K.
quelle
3
Sie können auch tuntype NUL>File2.txt
Danny Beckett
6
Übrigens, wie bekomme ich File1.txt?
TomeeNS
1

Sie können auch SETeine Nulldatei bytewie folgt erstellen

set x=x > EmptyFile.txt

Oder wenn Sie keine zusätzliche Variable erstellen möchten, weisen Sie eine vorhandene Variable wie neu zu

set PROMPT=%PROMPT% > EmptyFile.txt

oder so:

set "PROMPT=%PROMPT%" > EmptyFile.txt
PeterE
quelle
0

Es gibt unendlich viele Ansätze.

Befehle, die nichts ausgeben:

break
cls
color
goto
pushd
popd
prompt
title

Seltsame Befehle:

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

Der veraltete printBefehl erzeugt eine leere Datei:

print /d:EMPTY_TEXT_FILE nul
HackingAddict1337
quelle
-2

Der einfachste Weg ist:

echo. > Filename.txt

Batchman
quelle
8
Dadurch wird eine Datei mit einem Leerzeichen gefolgt von einem Wagenrücklaufzeichen gefolgt von einem neuen Zeilenzeichen erstellt - keine leere Datei.
Andriy M
Es lohnt sich, meine Antwort (unten) zu lesen, da sie die Codierung ändert.
Wolfpack'08
-3

WICHTIG:

Wenn Sie die Codierung nicht festlegen, können viele Softwareprogramme beschädigt werden. Git ist ein sehr beliebtes Beispiel.

Set-Content "your_ignore_file.txt" .gitignore -Encoding utf8 Dies unterscheidet zwischen Groß- und Kleinschreibung und erzwingt die utf8-Codierung!

Wolfpack'08
quelle
3
Wie ist die Codierung für die Erstellung einer leeren Datei relevant ? Eine Null-Byte-Datei benötigt keine Codierung und es ist schwierig, sie mit einer Stückliste (0 Byte) zu markieren
jeb
@jeb Da Benutzer leere Dateien füllen und gefüllte Dateien als Einstellungsdateien verwendet werden, erzeugen sie Fehler, wenn sie nicht UTF8 sind. Tatsächlich würde ich sagen, dass Leute fast immer Dateien füllen und sie nicht leer lassen, und ich würde keine andere Methode verwenden, um eine leere Datei zu erstellen, die ich später ändern wollte, weil ich fast immer sicher sein möchte, dass meine Dateien sind UTF8. Zum Beispiel fordert das .git-Tutorial auf github den Benutzer auf, eine leere Datei zu erstellen, die später gefüllt wird, und die andere Methode erstellt eine Datei mit seltsamer Windows-Codierung.
Wolfpack'08