Jak utworzyć pusty plik w wierszu polecenia w systemie Windows?

494

Jak utworzyć pusty plik w wierszu poleceń DOS / Windows?

Próbowałem:

copy nul > file.txt

ale zawsze pokazuje, że plik został skopiowany.

Czy jest jakaś inna metoda w standardowym cmd?

Powinna to być metoda niewymagająca polecenia dotykowego Cygwin ani żadnych innych niestandardowych poleceń. Polecenie musi zostać uruchomione ze skryptu, aby nie można było używać klawiszy.

Grendler
źródło
Właśnie znalazłem prawdziwe polecenie wsadowe, w wyniku którego powstał pusty plik (0 bajtów): Zaktualizowałem swoją odpowiedź.
VonC
3
Duplikat: stackoverflow.com/questions/210201 , „Jak utworzyć pusty plik tekstowy z pliku wsadowego?”. (Ale, IMHO, odpowiedzi są lepsze tutaj.)
Peter Mortensen
Tak, polecenie kopiuj nul> plik.txt jest tworzone z tekstem „1 plik (i) skopiowany”. Pusty plik nie jest tworzony.
Ripon Al Wasim,
5
To dla mnie tylko dowodzi, że MS-DOS jest śmieciem, jeśli nie można utworzyć zwykłego pustego pliku za pomocą jednego polecenia.
Kolob Canyon
2
@KolobCanyon: oczywiście możesz odpowiedzieć na już opublikowane odpowiedzi. Ale czy naprawdę uważasz, że możliwość szybkiego utworzenia pustego pliku powinna być priorytetem dla systemu operacyjnego skierowanego do użytkowników końcowych i wymagającego uruchomienia w 16 KB pamięci RAM? W końcu nie jest to szczególnie przydatne, z wyjątkiem kilku rzadkich przypadków.
Harry Johnston,

Odpowiedzi:

571

Bez przekierowania Luc Vu lub Erik Konstantopoulos zwracają uwagę na:

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

Jak utworzyć pusty plik tekstowy z pliku wsadowego? ” (2008) wskazuje również:

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 wspomina o oryginale :

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

W tym samym duchu Samuel sugeruje w komentarzach :

najkrótszy, którego używam, to w zasadzie ten autorstwa Nomada:

.>out.txt

Daje błąd:

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

Ale ten błąd dotyczy stderr. I >tylko przekierowuje standardowe wyjście, w którym nic nie zostało wyprodukowane.
Stąd utworzenie pustego pliku. Komunikat o błędzie można tutaj pominąć.


(Oryginalna odpowiedź, listopad 2009 r.)

echo.>filename

( echo ""wstawiłby „” do pliku! A echobez „.” wstawiłby „ Command ECHO activated” do pliku ...)

Uwaga: wynikowy plik nie jest pusty, ale zawiera sekwencję linii powrotnej: 2 bajty.


Ta dyskusja wskazuje na prawdziwe rozwiązanie wsadowe dla naprawdę pustego pliku:

 <nul (set/p z=) >filename

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

<nul” Potokuje nulodpowiedź na set/ppolecenie, co spowoduje, że zmienna pozostanie niezmieniona. Jak zwykle w set/pprzypadku łańcucha po prawej stronie znaku równości wyświetlany jest monit bez CRLF.

Ponieważ tutaj „ciąg po prawej stronie znaku równości” jest pusty ... wynikiem jest pusty plik.


Różnica w stosunku do cd. > filename(która jest wspomniana w odpowiedzi Patricka Cuffa i powoduje również utworzenie pliku o długości 0 bajtów) polega na tym, że ten „kawałek przekierowania” ( <nul...sztuczka) może być użyty do echa linii bez CR :

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

dirPolecenie powinno wskazywać rozmiar pliku jako 11 bajtów: „ helloworld!”.

VonC
źródło
2
tak naprawdę byś chciał, echo.>filenameponieważ będzie zawierał spację oraz znak nowej linii.
Agent_9191,
1
Użycie rempolecenia pozwala uniknąć tworzenia pliku z pustą linią.
Greg Hewgill
@ Agent_9191: prawda, zaktualizowałem swoją odpowiedź. @Greg: nie jestem pewien, co masz na myśli: rem>filenamedaje ten sam wynik (2 bajty)
VonC
3
Noufal Ibrahim: nie daj się zwieść; zobacz następną odpowiedź, która ma o wiele łatwiejsze i równie działające rozwiązanie. To, co tu zrobiono, jest częściowo niepoprawne w pierwszym przypadku (nie puste, ale zawiera podział wiersza) i jest nadmiernie skomplikowane w drugim przypadku.
Joey,
1
@barlop Tak: o to chodzi: wywołuje komunikat o błędzie na stderr, ale nic (pusty ciąg) na stdout. I >przekieruj standardowe wyjście tylko na out.txt. Stąd utworzenie pustego pliku. W tym kontekście możesz zignorować komunikat o błędzie.
VonC
270

Spróbuj tego:

type NUL > 1.txt

to z pewnością utworzy pusty plik.

Justin
źródło
Dodaje to do pliku „NUL is ./NUL”
dshgna,
106

Oto inny sposób:

cd. > filename
Patrick Mankiet
źródło
11
cd. > filenamenie jest dla mnie pracą, a nie pracą cd > filename !
NaveenDA
3
„cd.> nazwa pliku” tworzy pusty plik, w przeciwnym razie ścieżka pliku zostanie wydrukowana w nowo utworzonym pliku za pomocą polecenia „cd> nazwa pliku”.
niketan
6
Użyj tego: cd . > filename.extensionOznacza to, że potrzebujesz odstępu między cdi.
AIon
77

Jeśli naprawdę chcesz całkowicie pusty plik, bez wyjścia na standardowe wyjście, możesz oszukać:

copy nul file.txt > nul

Wystarczy przekierować stdout na nul, a wynik kopiowania zniknie.

qid
źródło
1
Nie powiedzie się, jeśli plik file.txt istnieje.
Grendler,
6
Niepowodzenie, jeśli plik istnieje, jest dobrym zachowaniem, ponieważ rozumiem pytanie.
wallyk
32
+1. To zadziwiające, że przyjęta odpowiedź jest czymś w połowie błędnym i w połowie skomplikowanym, podczas gdy ta oczywiście poprawna prawie nie zasługuje na uznanie. Aby dodać do tego: type nul>filebyłby inny sposób.
Joey,
@Joey zaakceptowany ma kilka rozwiązań, które działają, aby utworzyć pusty plik 0-bajtowy.
barlop
2
@barlop: Dla porównania, to była odpowiedź akceptowana w momencie Komentarz został napisany. Nie otrzymuję powiadomienia za każdym razem, gdy zmienia się odpowiedź, do której odsyłam w komentarzu.
Joey,
48

Otwórz plik :

type file.txt

Nowy plik :

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

Edytuj zawartość:

notepad file.txt

Kopiuj

copy file1.txt file1Copy.txt

Przemianować

rename file1.txt file1_rename.txt

Usunąć plik :

del file.txt
iCrazybest
źródło
Ładny przegląd poleceń cmd
KargWare,
32

Czytając komentarze do mojego postu, muszę przyznać, że nie przeczytałem poprawnie pytania.

W wierszu poleceń systemu Windows jednym ze sposobów byłoby użycie fsutil :

fsutil file createnew <filename> <size>

Przykład:

fsutil file createnew myEmptyFile.txt 0

Poniżej znajduje się wiersz polecenia * nix.

touch filename

To polecenie zmienia datę modyfikacji pliku lub tworzy go, jeśli plik nie zostanie znaleziony.

nash
źródło
Niestety pytanie wyraźnie stwierdza: „Bez polecenia dotykowego Cygwin”.
qid
3
Istnieją implementacje polecenia dotykowego inne niż Cygwin: unxutils.sourceforge.net jest dobry.
Greg Hewgill
W * nix osobiście jestem zwolennikiem prostego > filename, którego można również użyć do obcięcia istniejącego pliku.
Frank Farmer,
fsutilpotrzebuje uprawnień administracyjnych. To trochę za dużo, aby po prostu utworzyć pusty plik ...
Joey,
@Joey Czy wszystkie te polecenia nie są zbyt duże, aby utworzyć pusty plik? Nawet ten poniżej z 120 punktami to dużo, gdy jesteś przyzwyczajony do dotykania.
Johnny
29
echo "" > filename

Wierzę, że to działa na Windowsie / DOSie, ale moje ostatnie praktyczne doświadczenie z którymkolwiek z nich było całkiem dawno. Wiem na pewno, że działa w zasadzie na każdym systemie operacyjnym zgodnym z POSIX .

Kris
źródło
2
Wygląda na to, że odpowiedź VonC jest lepsza niż moja, więc proszę, głosujcie zamiast tego.
Kris,
3
Niestety: echo „” wyświetla podwójne cudzysłowy i są zapisywane w pliku, gdy strumień jest przekierowywany do niego. To samo dzieje się tylko z: echo> nazwa_pliku, ponieważ zapisuje, że ECHO jest również wyłączone / włączone w pliku.
Grendler,
może mógłbyś „@echo wyłączyć” w linii przed utworzeniem pliku, aby to obejść?
Kris,
27
call>file.txt

to najczystszy sposób jaki znam.

nephi12
źródło
Co w tym jest „czystego”?
GreenAsJade
4
nie przekazuje nic do pliku, będąc łatwym do zapamiętania i użytkowania.
nephi12
To było najprostsze rozwiązanie, które działa i najłatwiejsze do zapamiętania.
nhershy
12
cd > filename.cfg 

działało podczas tworzenia pliku w C: / Program Files, gdzie nie masz dostępu do bezpośredniego tworzenia plików.

Subhashi
źródło
11

Możesz napisać własny dotyk.

//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
źródło
6

copy con SomeFile.txt Enter

Ctrl-Z Enter

DRapp
źródło
Sprecyzowałem pytanie, że polecenie będzie uruchamiane ze skryptu, więc niestety żadna interakcja klawiatury nie działa. Mimo wszystko dziekuję.
Grendler,
6

Jeszcze inna metoda, która tworzy plik zero bajtów:

break > "file.txt"
foxidrive
źródło
6

dzięki czemu możesz utworzyć pusty plik za pomocą

'' > newfile.txt

przejdź do katalogu i wpisz powyższe polecenie w oknie PowerShell.

Uwaga: to nie zadziała w wierszu polecenia systemu Windows.

Aswin 1054
źródło
5

Spróbuj: abc > myFile.txt Najpierw utworzy plik o nazwie myFile.txtw bieżącym katalogu roboczym (w wierszu polecenia). Następnie uruchomi polecenie, abcktóre nie jest prawidłowym poleceniem. W ten sposób otrzymałeś nowy pusty plik o nazwie myFile.txt.

Koczownik
źródło
2
Mogłoby to być bardzo złe, gdyby abcznajdowało się na ścieżce i było funkcją ułatwiającą formatowanie wszystkich dysków oprócz katalogu instalacyjnego.
Krwawiące palce
5

type nul>filename utworzy nowy pusty plik.

Przepraszam za spóźnienie.

AKTUALIZACJA : copy nul filenameDziała również bez przekierowywania (bardziej oczywiste rozwiązanie).

EKons
źródło
5

Użyj copy > your_file_name.extensionw wierszu polecenia, np

P:\excecise> copy > Sample.txt
Raj Kumar Mishra
źródło
4

Możesz również użyć:

echo. 2>foo

Wyjście debugowania dla echo.prawie na pewno będzie puste.

Craig
źródło
4

Czytam wiele wątków, ale nie jest to najkrótsza droga.

Proszę użyć polecenia:

>copy /b NUL empty_file.txt

suhao399
źródło
4

Możesz użyć starej komendy

copy con file_name.ext

nic nie wpisuj, po prostu naciśnij F6, aby go zapisać, jednak wydrukuje „Plik skopiowany”, ale po otwarciu plik będzie pusty

Amado Saladino
źródło
4

Do utworzenia dowolnego typu pliku możesz użyć następującego kodu

wpisz nul> (nazwa_pliku). (typ_pliku)

Na przykład. Jeśli chcesz utworzyć plik tekstowy, to

wpisz nul> demo.txt

Jeśli chcesz utworzyć plik javascript, to

wpisz nul> demo.js

Darshan Jain
źródło
3

To działało dla mnie

echo > file.extension

Oto inny sposób, który dzisiaj znalazłem, czerpałem pomysły z innych odpowiedzi, ale zadziałało

sometext > filename.extension

Na przykład.

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

Spowoduje to wyświetlenie komunikatu o błędzie w wierszu polecenia, który:

xyz nie jest poleceniem wewnętrznym ani zewnętrznym, programem operacyjnym ani plikiem wsadowym.

Ale dziwną rzeczą, którą znalazłem, jest to, że plik jest tworzony w katalogu, nawet jeśli polecenie nie jest standardowym poleceniem systemu Windows.

Szczęściarz
źródło
1
Istnieje więcej niż jeden „uchwyt”, który aplikacje konsolowe mogą odczytywać / zapisywać. Standardowe to: (0) STDIN, (1) STDOUT i (2) STDERR. Uważam, że powód, dla którego twoja sztuczka działa tutaj, jest taki, że wszystkie dane wyjściowe trafiają do uchwytu błędu, ale kierujesz STDOUT tylko do pliku. Spróbuj wykonać: „xyz> emptyfile.txt 2> & 1”, aby przekierować STDERR do dowolnego używanego STDOUT, co zdarza się przekierowywać do „emptyfile.txt”. Powinieneś teraz zobaczyć komunikat o błędzie wewnątrz tego pliku.
Brent Rittenhouse
3

Spróbuj tego:

echo $null >> filename 

Zobacz: superUser

shireef khatab
źródło
3

W systemie Windows próbowałem to zrobić

echo off > fff1.txt

i utworzył plik o nazwie fff1.txt o rozmiarze pliku 0kb

Nie znalazłem żadnych innych poleceń niż to, które mogłyby stworzyć pusty plik.

Uwaga: Musisz znajdować się w katalogu, w którym chcesz utworzyć plik.

Omkar Agrawal
źródło
w razie potrzeby nie zapomnij włączyć echa po utworzeniu pliku.
QMaster
To polecenie zawiesza cmd po kliknięciu ENTER.
Kavin Raju S
Nie jestem pewien, dlaczego tak się dzieje, ale myślę, że powinieneś zrobić „echo” po wprowadzeniu powyższego polecenia.
Omkar Agrawal
3

Jeszcze inny sposób:

copy nul 2>empty_file.txt
GadBro
źródło
2

Właśnie próbowałem w systemie Windows

copy con file.txt

następnie naciśnij Enterklawisz, a następnie naciśnijCtrl+Z Enter

I to zadziałało dla mnie.

W systemie Ubuntu zwykle tworzę plik za pomocą komendy VI

vi file.txt

Otworzy plik, następnie naciśnij ESCklawisz, a następnie wpisz : wp, a następnie naciśnij enterklawisz. Stworzy nowy plik z pustymi danymi.

ARJUN KP
źródło
2
  • utwórz plik nietoperza z zawartością echo '' > %1. (nazwij plik jako touch.bat)
  • dodaj folder do zmiennej PATH.
  • możesz używać dotyku do tworzenia plików. (Np .: touch temp.txttworzy plik temp.txt)

sprawdź ten artykuł, aby uzyskać więcej informacji.

Pranay Kumar
źródło
1

Dziś odkryłem nowy :)

Spowoduje to zmianę tytułu okna wiersza poleceń, ale także utworzy pusty plik.

title > file.txt
ninix
źródło
1

Uruchom CMD w trybie administratora i wpisz:

NUL > file_name.extention

lub wpiszesz to

echo .> file_name.extention
Lekens
źródło
1

Oto jeszcze jeden sposób:

rem/ > file.ext

Cięcie /jest obowiązkowe; bez tego część przekierowania została skomentowana przez rem.

aschipfl
źródło
0

Najpierw utwórz plik, aby istniał:

echo . > myfile.txt

Następnie zastąp utworzony plik pustą wersją za pomocą copypolecenia:

copy /y nul myfile.txt
Dowopfan
źródło