Jak utworzyć pusty plik tekstowy z pliku wsadowego?

244

Czy ktoś może sobie przypomnieć, jakie było polecenie utworzenia pustego pliku w MSDOS przy użyciu pliku BAT?

m_pGladiator
źródło
3
Również na stackoverflow.com/questions/1702762 , „Jak utworzyć pusty plik w wierszu poleceń?”.
Peter Mortensen
6
Nie mylisz DOS-a cmd.exe, prawda?
użytkownik nieznany
CZYTAJ MNIE: Set-Content "your_file.txt" .gitignore -Encoding utf8rozróżnia małe i wielkie litery i wymusza kodowanie utf8! (Opublikowałem to również jako odpowiedź).
Wolfpack'08

Odpowiedzi:

235
echo. 2>EmptyFile.txt
Smerf
źródło
49
To echo nowego wiersza standardowego, choć ... moja odpowiedź nie.
ephemient
7
Czasami jest to istotne; Kiedyś miałem dotyk, dopóki nie wpadłem na pomysł, aby po prostu skopiować NUL (lub wpisać NUL> plik) w celu uzyskania plików 0-bajtowych. :-)
Joey
18
Aby scalić odpowiedź ephemient i tę, możesz: „echo.> NUL 2> EmptyFile.txt”, aby osiągnąć te same wyniki bez wypisywania nowego wiersza
cmptrgeekken
7
Dlaczego jest .wecho.
Ninh Pham
3
@Reegan Jeśli użyjesz go echo 2bez niego ., konsola wyświetli „ECHO jest wyłączone”. echo. 2Efektywne użycie wycisza wyjście konsoli, wyświetlając tylko nowy wiersz.
OneManBand,
362
skopiuj NUL EmptyFile.txt

DOS ma kilka specjalnych plików (właściwie urządzeń), które istnieją w każdym katalogu, co NULjest odpowiednikiem UNIX /dev/null: jest to magiczny plik, który jest zawsze pusty i wyrzuca wszystko, co do niego piszesz. Oto lista innych; CONjest również czasami przydatne.

Aby w ogóle nie mieć żadnych danych wyjściowych, możesz użyć

copy / y NUL EmptyFile.txt> NUL

/yzapobiega copyzadawaniu pytania, którego nie widzisz, gdy dane wyjściowe są wysyłane NUL.

efemeryczny
źródło
36
+1 - pytanie zawiera pusty plik, więc zaakceptowana odpowiedź jest błędna.
Joe
9
Rozwiązanie DannySmurf faktycznie tworzy pusty plik - nowa linia przechodzi na stdout, nic nie przechodzi do stderr (skierowane do nowego pliku). Ale i tak dziękuję za +1
efhemient
2
wpisz nul> EmptyFile.txt to najkrótsze rozwiązanie. Mimo to Twoja odpowiedź jest lepsza niż zaakceptowane rozwiązanie, ponieważ plik będzie naprawdę pusty. +1
TPAKTOPA
3
Ostrzeżenie: tak, pytanie dotyczyło sposobu utworzenia pustego pliku, jednak zazwyczaj chcesz „upewnić się, że plik istnieje”. Użycie copy /Y NULpolecenia może usunąć istniejącą zawartość. Jeśli jesteś przyzwyczajony do touchkomendy Unixa , może to nie być takie, jakiego oczekujesz.) Korzystanie type NUL >> emptyfile.txtjest bezpieczniejsze pod tym względem.
eckes
Nie znalazłem żadnych informacji CONpoza tymi, do których odsyłam w tej odpowiedzi. Czy ktoś mógłby podzielić się lekkim czytaniem?
Sinjai
182
type NUL > EmptyFile.txt

Po przeczytaniu dwóch poprzednich postów wymyśliłem tę mieszankę dwóch. Wydaje się trochę czystszy. Nie trzeba się martwić przekierowaniem „skopiowanych plików (plików) 1”. wiadomość do NUL, podobnie jak poprzedni post, i ładnie wygląda obok tego ECHO OutputLineFromLoop >> Emptyfile.txt, który zwykle następuje w pliku wsadowym.

Kevin K.
źródło
13
+1 jest to naturalny, który przychodzi na myśl, a nie kontrowersje ze stderr itp.
Amit Naidu
2
Masz rację. Ta metoda pozwala uniknąć flagi / y w poleceniu kopiowania.
djangofan
Krótko i łatwo. Kilka innych rozwiązań tutaj nie tworzy nowego pliku zero bajtów!
Christian St.
66

Techniki zebrane na podstawie innych odpowiedzi:

Sprawia, że ​​plik 0-bajtowy jest bardzo przejrzysty i zgodny z poprzednimi wersjami:

type nul >EmptyFile.txt

pomysł poprzez: anonimowy , Danny Backett , być może inni, ja zainspirowany pracą JdeBP

Plik 0-bajtowy w inny sposób , jest zgodny z poprzednimi wersjami:

REM. >EmptyFile.txt

pomysł za pośrednictwem: Johannes

Plik 0-bajtowy , również zgodny z poprzednimi wersjami, 3 sposób :

echo. 2>EmptyFile.txt

pomysł za pośrednictwem: TheSmurf

Plik 0-bajtowy w systematyczny sposób prawdopodobnie dostępny od Windows 2000:

fsutil file createnew EmptyFile.txt 0

pomysł za pośrednictwem: Emm

Plik 0 bajtów zastępujący pliki tylko do odczytu

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

pomysł za pośrednictwem: prawa autorskie

Pojedynczy nowy wiersz (2 bajty: 0x0D 0x0Aw zapisie szesnastkowym , alternatywnie zapisany jako \r\n):

echo.>AlmostEmptyFile.txt

Uwaga: nie ma przestrzeni między echo, .i >.

pomysł za pośrednictwem: jak można powtórzyć nowy wiersz w plikach wsadowych?


edycja Wygląda na to, że każde nieprawidłowe polecenie przekierowane do pliku utworzy pusty plik. heh, funkcja! kompatybilność: uknown

TheInvisibleFeature <nul >EmptyFile.txt

Plik 0 bajtów: nieprawidłowe polecenie / z losową nazwą (zgodność: uknown):

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

via: świetne źródło losowe autorstwa Hung Huynh

edit 2 Andriy M wskazuje prawdopodobnie najbardziej zabawny / prowokujący sposób na osiągnięcie tego poprzez nieprawidłowe polecenie

Plik 0 bajtów: nieprawidłowe polecenie / funky sposób (zgodność: nieznana)

*>EmptyFile.txt

pomysł za pośrednictwem: Andriy M.

Plik 0-bajtowy 4. sposób :

break > file.txt

Pomysł poprzez: foxidrive dzięki komentarz z podwójnym Gras !

n611x007
źródło
Właściwie to type nul ...nie type <nul ....
Andriy M
@AndriyM dziękuję, masz rację Dokonałem edycji! Nie zauważyłem, ponieważ co ciekawe, działa z niewłaściwym. co może oznaczać, że każde nieprawidłowe polecenie przekierowane na nazwę pliku utworzy pusty plik! właśnie spróbowałem NonExistentCommand <nul >EmptyFile.txti zadziałało
n611x007
ponieważ niebezpiecznie byłoby polegać na zapisanej na stałe nazwie polecenia oczekującej, że będzie ona „nieprawidłowa”, dodałem opcję losowej nazwy polecenia
n611x007
2
Jeszcze jedno: podpiera foxidrivebreak > file.txt
Gras Double
3
I z większością poleceń można korzystać, >>jeśli potrzebujesz „musi istnieć, ale nie należy go obcinać, jeśli istnieje” (podobnie jak Unix touch)
eckes
25

REM. > pusty plik

Johannes
źródło
Utknąłem w systemie Windows CE i jest to jedyna odpowiedź, która tworzy i pusty plik! Inne podejścia albo dodają pustą linię, albo po prostu nie działają ...
AntonyG
Jedynym problemem związanym z tym rozwiązaniem jest to, że jeśli w bieżącym katalogu znajduje się plik o nazwie REM i po wpisaniu REM.polecenia cmd odpowie „rem”. nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne, program operacyjny ani plik wsadowy. ”
DodgyCodeException
@DodgyCodeException, używając rem/zamiast rem.rozwiązania tego problemu ...
aschipfl
@aschipfl dzięki, to interesujące. Interesujące jest również to, że w odpowiedzi z 2010 roku komentarze były od siebie oddalone o kilka lat. Wolna rozmowa!
DodgyCodeException
8

Jeśli istnieje możliwość, że plik do zapisania już istnieje i jest tylko do odczytu, użyj następującego kodu:

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

Jeśli nie istnieje żaden plik, po prostu wykonaj:

CD .>filename.ext

(zaktualizowany / zmieniony kod zgodnie z komentarzem DodgyCodeException)

Aby usunąć wszelkie błędy, które mogą się pojawić:

ATTRIB -R filename.ext>NUL
(CD .>filename.ext)2>NUL
skrypt i kod
źródło
1
Jedynym problemem związanym z tym rozwiązaniem jest to, że jeśli CDw bieżącym katalogu znajduje się plik o nazwie (bez rozszerzenia), a po wpisaniu CD.polecenie cmd odpowie „CD”. nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne, program operacyjny ani plik wsadowy. ” Jeśli zamiast tego wpiszesz CD .(ze spacją przed kropką), to zadziała.
DodgyCodeException
7
fsutil file createnew file.cmd 0
Emm
źródło
Narzędzie FSUTIL wymaga posiadania uprawnień administracyjnych.
DodgyCodeException
fsutil nie jest standardowym narzędziem w MS-DOS.
Bernhard Eriksson,
7

Jeszcze jeden do dodania do książek - krótki i słodki do pisania.

break>file.txt
break>"file with spaces in name.txt"
foxidrive
źródło
Chyba pominęlibyśmy cytaty
Nam G VU
@NamGVU Cudzysłowy są używane w docelowej nazwie pliku, jeśli zdecydujesz się użyć elementów długiej nazwy pliku, takich jak spacja lub itp. Nie są one częścią zawartości pliku.
foxidrive
Tak, zgadzam się ^^ Pozwolenie na aktualizację twojego, jak omówiono.
Nam G VU,
@NamGVU Cytaty można pozostawić na miejscu z długą nazwą pliku lub bez niej. Sądzę, że jeśli zostanie wpisany z wiersza polecenia za pomocą krótkiej nazwy pliku, nie chcesz niepotrzebnego pisania.
foxidrive
Sugeruję usunięcie drugiej linii z tej odpowiedzi. IMO to najlepsza jak dotąd odpowiedź na pytanie, ale druga linia tak naprawdę nie dodaje wartości, chyba że osoba próbująca jej użyć nie zna podstaw obsługi białych znaków dla wiersza poleceń.
kayleeFrye_onDeck 17.07.18
2

Zamiast tego możesz użyć TYPEpolecenia COPY. Spróbuj tego:

TYPE File1.txt>File2.txt

Gdzie File1.txtjest pusty.

Kevin K.
źródło
3
Możesz także zrobićtype NUL>File2.txt
Danny Beckett,
6
BTW, jak zdobyć File1.txt?
TomeeNS,
1

Możesz również użyć SETdo utworzenia pustego bytepliku w następujący sposób

set x=x > EmptyFile.txt

Lub jeśli nie chcesz utworzyć dodatkowej zmiennej, ponownie przypisz istniejącą zmienną, taką jak

set PROMPT=%PROMPT% > EmptyFile.txt

lub tak:

set "PROMPT=%PROMPT%" > EmptyFile.txt
PeterE
źródło
0

Istnieją nieskończone podejścia.

Polecenia, które nic nie generują:

break
cls
color
goto
pushd
popd
prompt
title

Dziwne polecenia:

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

Nieaktualne printpolecenie tworzy pusty plik:

print /d:EMPTY_TEXT_FILE nul
HackingAddict1337
źródło
-2

Najprostszym sposobem jest:

echo. > Filename.txt

Batchman
źródło
8
Spowoduje to utworzenie pliku ze znakiem spacji, po którym nastąpi znak powrotu karetki, a po nim nowy znak wiersza - nie pusty plik.
Andriy M
Warto spojrzeć na moją odpowiedź (poniżej), ponieważ zmienia ona kodowanie.
Wolfpack'08
-3

WAŻNY:

Jeśli nie ustawisz kodowania, wiele programów może się zepsuć. git jest bardzo popularnym przykładem.

Set-Content "your_ignore_file.txt" .gitignore -Encoding utf8 rozróżnia małe i wielkie litery i wymusza kodowanie utf8!

Wolfpack'08
źródło
3
W jaki sposób kodowanie jest istotne przy tworzeniu pustego pliku? Plik pustego bajtu nie wymaga kodowania i trudno jest go oznaczyć za pomocą BOM (0 bajtów)
jeb
@jeb, ponieważ ludzie wypełniają puste pliki, a gdy wypełnione pliki są używane jako pliki ustawień, tworzą błędy, gdy nie są UTF8. W rzeczywistości powiedziałbym, że ludzie prawie zawsze wypełniają pliki i nie pozostawiają ich pustymi, i nie użyłbym żadnej innej metody, aby utworzyć pusty plik, który później zamierzałem zmienić, ponieważ prawie zawsze chcę mieć pewność, że moje pliki są UTF8. Na przykład, samouczek .git na github prosi użytkownika o utworzenie pustego pliku, który jest wypełniany później, a druga metoda tworzy plik z dziwnym kodowaniem Windows.
Wolfpack'08