Как в Windows создать пустой файл в командной строке?

Как я могу создать пустой файл в командной строке DOS / Windows?

Я пытался:

copy nul > file.txt

Но всегда показывает, что файл был скопирован.

А в стандартном cmd есть другой способ?

Это должен быть метод, не требующий выполнения команды touch из Cygwin или любой другой нестандартные команды. Команда должна запускаться из сценария, поэтому нельзя использовать нажатия клавиш.


person Grendler    schedule 09.11.2009    source источник
comment
Только что нашел настоящую пакетную команду, в результате которой был получен пустой файл (0 байт): я обновил свой ответ.   -  person VonC    schedule 09.11.2009
comment
Дубликат: stackoverflow.com/questions/210201, Как создать пустой текстовый файл из командного файла ?. (Но, ИМХО, здесь ответы лучше.)   -  person Peter Mortensen    schedule 25.01.2010
comment
Да, команда copy nul ›file.txt создается с копированием файла (ов) text 1. Пустой файл не создается.   -  person Ripon Al Wasim    schedule 10.09.2015
comment
Для меня это просто доказывает, что MS-DOS - это мусор, если вы не можете создать простой пустой файл с помощью одной команды.   -  person Kellen Stuart    schedule 04.03.2016
comment
@KolobCanyon: вы можете, конечно, по уже опубликованным ответам. Но действительно ли вы думаете, что возможность быстрого создания пустого файла должна быть приоритетом для операционной системы, ориентированной на конечных пользователей и нуждающейся в работе с 16 КБ ОЗУ? В конце концов, это не особенно полезная вещь, за исключением нескольких редких крайних случаев.   -  person Harry Johnston    schedule 27.12.2016
comment
Не перенаправляйте вывод из копии (т.е. копируется 1 файл (ы)). Скопируйте nul в файл: скопируйте nul emptyFile.txt   -  person riderBill    schedule 05.10.2017
comment
cd > "filename.extension" должен выполнить свою работу, например cd > file.txt   -  person Mahesh Jamdade    schedule 02.06.2019
comment
MSDos удалит любые 0-байтовые файлы, которые вы попытаетесь скопировать. Windows этого не делает.   -  person    schedule 10.02.2020


Ответы (34)


Без перенаправления, Luc Vu или Эрик Константопулос point out в:

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

Как создать пустой текстовый файл из командного файла? (2008) также указывает на:

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 упоминает исходный < / а>:

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

В том же духе Самуэль предлагает в комментариях:

самый короткий, который я использую, в основном от Nomad:

.>out.txt

Выдает ошибку:

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

Но эта ошибка находится на stderr. И > перенаправляет только stdout, где ничего не было создано.
Следовательно, создается пустой файл.
Здесь можно проигнорировать сообщение об ошибке. Или, как в Rain ответ, перенаправлен на NUL:

.>out.txt 2>NUL

(Оригинальный ответ, ноябрь 2009 г.)

echo.>filename

(echo "" фактически помещает в файл! И echo без '.' Помещает Command ECHO activated в файл ...)

Примечание: результирующий файл не пустой, но включает последовательность возвращаемой строки: 2 байта.


Это обсуждение указывает на истинное пакетное решение для реального пустого файла:

 <nul (set/p z=) >filename

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

<nul направляет nul ответ на команду set/p, в результате чего используемая переменная остается неизменной. Как обычно с set/p, строка справа от знака равенства отображается как приглашение без CRLF.

Поскольку здесь строка справа от знака равенства пуста ... результат - пустой файл.


Разница с cd. > filename (который упоминается в Ответ Патрика Каффа, который также создает файл длиной 0 байт) заключается в том, что этот бит перенаправления (трюк <nul...) можно использовать для эхо-строк без каких-либо CR:

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

Команда dir должна указывать размер файла как 11 байт: helloworld!.

person VonC    schedule 09.11.2009
comment
вам действительно нужен echo.>filename, потому что он будет включать в себя как пробел, так и символ новой строки. - person Agent_9191; 09.11.2009
comment
Использование команды rem позволяет избежать создания файла с пустой строкой в ​​нем. - person Greg Hewgill; 09.11.2009
comment
@ Agent_9191: правда, я обновил свой ответ. @Greg: не уверен, что вы имеете в виду: rem>filename дает тот же результат (2 байта) - person VonC; 09.11.2009
comment
Я помню, что трюк rem работал в прошлом (может быть, только в DOS?), Но, видимо, не сегодня! - person Greg Hewgill; 09.11.2009
comment
@VonC ‹nul (set / p z =)› трюк с именем файла работает именно так, как мне нужно. Спасибо :-) - person Grendler; 09.11.2009
comment
Нуфаль Ибрагим: не позволяйте этому вводить вас в заблуждение; просто посмотрите следующий ответ, в котором есть гораздо более простое и одинаково работающее решение. То, что здесь сделано, частично неверно в первом случае (не пусто, но содержит разрыв строки) и слишком сложно во втором. - person Joey; 13.01.2010
comment
самый короткий, который я использую, в основном от Nomad:. ›out.txt :) - person Samuel; 28.04.2017
comment
@VonC Выполнение предложения Самуэля, .>out.txt просто выдает ошибку '.' is not recognized as an internal or external command, - person barlop; 22.07.2017
comment
@barlop Да: в этом суть: он вызывает сообщение об ошибке на stderr, но ничего (пустая строка) на stdout. И > перенаправить стандартный вывод только на out.txt. Следовательно, создается пустой файл. Вы можете проигнорировать сообщение об ошибке в этом контексте. - person VonC; 22.07.2017
comment
Начальный пробел во 2-й строке удаляется командным процессором, поэтому вы получаете 11-байтовый однословный файл. - person Zimba; 11.04.2020
comment
@Zimba Какую команду вы используете? Что такое 2-я линия? echo. 2>EmptyFile.txt? - person VonC; 11.04.2020
comment
@VonC: Ваша 2-я строка: <nul (set/p z= world!) >>out.txt приводит к миру без начального пробела. dir out.txt дает мне 11 байт, а не 12. - 12/04/2020 19:54 11 out.txt 1 File(s) 11 bytes - person Zimba; 12.04.2020
comment
@Zimba Спасибо. Я соответствующим образом отредактировал ответ. - person VonC; 12.04.2020
comment
Обратите внимание, что copy является встроенным пакетом, поэтому он не будет работать, например, с subprocess.run Python - person xjcl; 15.02.2021
comment
@xjcl Верно. Я полагаю, вам нужно будет вызвать эту оболочку, чтобы выполнить ее встроенную команду, как в stackoverflow.com/a/5485749/6309. - person VonC; 15.02.2021
comment
@xjcl Это тоже действительно сработает. - person VonC; 15.02.2021

Попробуй это:

type NUL > 1.txt

это обязательно создаст пустой файл.

person Justin    schedule 06.01.2013
comment
Это добавляет в файл NUL ./NUL. - person dshgna; 11.09.2015

Вот еще один способ:

cd. > filename
person Patrick Cuff    schedule 09.11.2009
comment
cd. > filename у меня не работает вместо cd > filename работает! - person Naveen DA; 06.08.2017
comment
CD. ›Filename создает пустой файл, иначе путь к файлу будет напечатан во вновь созданном файле с помощью команды cd› filename. - person niketan; 07.08.2017
comment
Используйте это: cd . > filename.extension Это означает, что вам нужен пробел между cd и . - person AIon; 20.02.2018

Если вам действительно нужен полностью пустой файл без вывода на стандартный вывод, можно немного схитрить:

copy nul file.txt > nul

Просто перенаправьте stdout на nul, и вывод из копии исчезнет.

person qid    schedule 09.11.2009
comment
Это не удается, если существует файл file.txt. - person Grendler; 09.11.2009
comment
Ошибка, если файл существует, - это хорошее поведение, насколько я понимаю вопрос. - person wallyk; 13.11.2009
comment
+1. Удивительно, насколько принятый ответ является чем-то наполовину неправильным и наполовину запутанным, в то время как очевидно правильный ответ почти не заслуживает уважения. Чтобы добавить к этому: type nul>file было бы другим способом. - person Joey; 13.01.2010
comment
У @Joey, принятого, есть куча решений, которые работают для создания пустого 0-байтового файла. - person barlop; 22.07.2017
comment
@barlop: Для справки: это был принятый ответ на момент написания комментария. Я не получаю уведомление каждый раз, когда изменяется ответ, на который я ссылаюсь в комментарии. - person Joey; 22.07.2017

Открыть файл:

type file.txt

Новый файл:

  • Способ 1: type nul > file.txt
  • Способ 2: echo This is a sample text file > sample.txt
  • Способ 3: notepad myfile.txt ‹нажмите Enter

Редактировать содержание:

notepad file.txt

Копировать

copy file1.txt file1Copy.txt

Переименовать

rename file1.txt file1_rename.txt

Удалить файл:

del file.txt
person Community    schedule 10.01.2015
comment
подробнее ›filename.txt, чем CTRL + C. - person SidPro; 21.04.2021

В командной строке Windows можно использовать fsutil:

fsutil file createnew <filename> <size>

Пример:

fsutil file createnew myEmptyFile.txt 0

Ниже приведено описание командной строки * nix.

touch filename

Эта команда изменяет дату изменения файла или создает его, если файл не найден.

person nash    schedule 09.11.2009
comment
К сожалению, в вопросе конкретно говорится: Без сенсорной команды от Cygwin. - person qid; 09.11.2009
comment
Существуют реализации команды touch, отличные от Cygwin: unxutils.sourceforge.net - это хорошо. - person Greg Hewgill; 09.11.2009
comment
В * nix я лично неравнодушен к простому > filename, который также можно использовать для усечения существующего файла. - person Frank Farmer; 12.01.2010
comment
fsutil требуются права администратора. Это многовато для простого создания пустого файла ... - person Joey; 13.01.2010
comment
@Joey Разве все эти команды не утомительны для создания пустого файла? Даже тот, что ниже со 120 точками, - это много, когда вы привыкли трогать. - person johnny; 18.03.2015

call > file.txt

Это самый чистый способ, который я знаю.

person cure    schedule 24.10.2013
comment
Что в этом чистого? - person GreenAsJade; 06.01.2016
comment
он ничего не выводит в файл, но его легко запомнить и использовать. - person cure; 22.09.2016
comment
Это было самое простое решение, которое работает, и его легче всего запомнить. - person nhershy; 25.07.2018
comment
Как это работает? Он вызывает сценарий с пустым именем (?). Каков результат и возможные побочные эффекты (например, стандартная ошибка)? Нет ли менее непонятного пути? Нельзя использовать ZZ вместо call (не то чтобы это менее неясно)? - например, Ответ кочевника. - person Peter Mortensen; 28.05.2021

echo "" > filename

Я считаю, что это работает в Windows / DOS, но мой последний практический опыт работы с ними произошел довольно давно. Я точно знаю, что он работает практически с любой POSIX-совместимой ОС.

person Kris    schedule 09.11.2009
comment
По-видимому, ответ VonC лучше моего, поэтому, пожалуйста, проголосуйте за него. - person Kris; 09.11.2009
comment
К сожалению: echo отображает двойные кавычки, и они записываются в файл при перенаправлении потока на него. То же самое происходит с просто: echo ›filename, потому что он также пишет, что ECHO выключено / включено в файл. - person Grendler; 09.11.2009
comment
может быть, вы могли бы отключить @echo в строке перед созданием файла, чтобы обойти это? - person Kris; 09.11.2009

cd > filename.cfg 

работал при создании файла в C: / Program Files, где у вас нет доступа для создания файлов напрямую.

person Subhashi    schedule 28.02.2018
comment
Что должно произойти? Как это обходится с базовой безопасностью? Вы можете уточнить? Желательно, отредактировав свой ответ, а не здесь, в комментариях (без Edit :, Update: или подобное - ответ должен появиться так, как если бы он был написан сегодня). - person Peter Mortensen; 28.05.2021

Вы можете написать свое собственное прикосновение.

//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;
}
person Paul Nathan    schedule 09.11.2009

Для создания любого типа файла вы можете использовать следующий код

type nul > (file_name).(file_type)

Например, если вы хотите создать текстовый файл, тогда

type nul > demo.txt

Если вы хотите создать файл JavaScript, тогда

type nul > demo.js
person Darshan Jain    schedule 06.03.2019

copy con SomeFile.txt Enter

Ctrl + Z и Enter.

person DRapp    schedule 09.11.2009
comment
Я уточнил вопрос, что команда будет запускаться из сценария, поэтому, к сожалению, никакое взаимодействие с клавиатурой не работает. В любом случае, спасибо. - person Grendler; 09.11.2009

Вы можете создать пустой файл с помощью

'' > newfile.txt

Перейдите в каталог и введите указанную выше команду в окне PowerShell.

Обратите внимание, что это не будет работать в командной строке Windows.

person Aswin 1054    schedule 03.04.2018

Еще один метод, который создает файл с нулевым байтом:

break > "file.txt"
person foxidrive    schedule 27.08.2014
comment
Как это работает? Что такое теория работы? break - неизвестная команда, приводящая только к стандартной ошибке? Или что-то другое? - person Peter Mortensen; 28.05.2021

Используйте copy > your_file_name.extension в командной строке, например

P:\excecise> copy > Sample.txt
person Raj Kumar Mishra    schedule 21.10.2017
comment
Что такое эксциз? Вы имеете в виду упражнение? Или что-то другое? - person Peter Mortensen; 28.05.2021

Вы также можете использовать:

echo. 2>foo

Вывод отладки для echo. почти наверняка будет пустым.

person Craig    schedule 13.10.2010

Попробуйте следующее: abc > myFile.txt Сначала он создаст файл с именем myFile.txt в текущем рабочем каталоге (в командной строке). Затем он выполнит команду abc, которая не является допустимой командой. Таким образом, вы получили новый пустой файл с именем myFile.txt.

person Nomad    schedule 27.11.2013
comment
Это могло быть очень неправильным, если abc был в пути и был удобной функцией для форматирования всех дисков, кроме установочного каталога. - person Bleeding Fingers; 31.12.2013

Это сработало для меня,

echo > file.extension

Вот еще один способ, который я нашел сегодня. Я получил идеи из других ответов, но это сработало:

sometext > filename.extension

Например,

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

В командной строке появится сообщение об ошибке:

xyz не является внутренней или внешней командой, действующей программой или командным файлом.

Но я обнаружил странную вещь: файл создается в каталоге, даже если команда не является стандартной командой Windows.

person Lucky    schedule 01.10.2014
comment
Существует несколько дескрипторов, которые консольные приложения могут читать / писать. Стандартные: (0) STDIN, (1) STDOUT и (2) STDERR. Я считаю, что причина, по которой ваш трюк здесь работает, заключается в том, что весь вывод идет в обработчик ошибки, а вы только направляете STDOUT в файл. Попробуйте сделать: xyz ›emptyfile.txt 2› & 1, чтобы перенаправить STDERR на любой используемый STDOUT, который, как оказалось, перенаправляет на emptyfile.txt. Теперь вы должны увидеть сообщение об ошибке внутри этого файла. - person Brent Rittenhouse; 27.04.2017
comment
Первый не приведет к пустому файлу. Он будет содержать 13 символов (11 обычных символов + CR + LF): ECHO включен. - person Peter Mortensen; 30.05.2021

type nul > filename создаст новый пустой файл.

Также copy nul filename работает без перенаправления (более очевидное решение).

person EKons    schedule 13.07.2015
comment
По крайней мере, это не непонятное решение, как многие другие ответы. - person Peter Mortensen; 28.05.2021

Я прочитал много веток, но это не самый короткий путь.

Пожалуйста, используйте команду:

>copy /b NUL empty_file.txt

person suhao399    schedule 25.12.2015
comment
Почему это работает? Что такое теория работы? Например, зачем нужен ведущий > (вопрос не риторический)? - person Peter Mortensen; 28.05.2021
comment
›В начале строки обычно отображается ввод текста после только в командной строке. Это копия файла NUL (который содержит 0 байт). так что он должен работать. - person suhao399; 28.06.2021

Вы можете использовать старую команду

copy con file_name.ext

Ничего не печатайте. Просто нажмите F6, чтобы сохранить его. Тем не менее, он напечатает файл скопирован, но когда вы откроете файл, он будет пустым.

person Amado Saladino    schedule 19.05.2018
comment
Как это работает? Почему это работает? con какая-то зарезервированная штука? Вы можете уточнить? Пожалуйста, ответьте, отредактировав свой ответ, а не здесь, в комментариях (без Edit :, Update: или подобное - ответ должен появиться так, как если бы он был написан сегодня). - person Peter Mortensen; 28.05.2021
comment
Как я уже писал, набери что угодно, просто нажмите F6 - person Amado Saladino; 29.05.2021

Еще один способ:

copy nul 2> empty_file.txt
person GadBro    schedule 30.06.2016
comment
Почему это работает? Что такое теория работы? - person Peter Mortensen; 28.05.2021

Попробуй это:

echo $null >> filename 

См .: Эквивалент Linux touch на создать пустой файл с помощью PowerShell

person shireef khatab    schedule 05.10.2017

В Windows

Я пробовал сделать это

echo off > fff1.txt

И он создал файл с именем fff1.txt с размером файла 0 КБ.

Я не нашел никаких других команд, кроме этой, которые могли бы создать пустой файл.

Примечание. Вы должны находиться в каталоге, в котором хотите создать файл.

person OMKAR AGRAWAL    schedule 21.10.2017
comment
не забудьте включить эхо после создания файла, если вам нужно. - person QMaster; 15.11.2018
comment
Я не уверен, почему это происходит, но я предполагаю, что вы должны включить эхо после ввода указанной выше команды. - person OMKAR AGRAWAL; 04.06.2020
comment
Re Я не нашел никаких других команд, кроме этой, которые могли бы создать пустой файл.: Значит, вы не смотрели здесь ни одного из 30+ предыдущих ответов? - person Peter Mortensen; 28.05.2021

  • Создайте файл bat с содержимым echo '' > %1 (назовите файл touch.bat).
  • Добавьте папку в переменную среды PATH.
  • Вы можете использовать прикосновение для создания файлов. (например: touch temp.txt создает файл temp.txt)

Дополнительную информацию можно найти в этой статье.

person Pranay Kumar    schedule 12.06.2018

Вот еще один способ:

rem/ > file.ext

Косая черта / является обязательной; без него часть перенаправления закомментирована rem.

person aschipfl    schedule 21.02.2017
comment
Это действительно работает в DOSBox, в отличие от многих других решений здесь. Попытка echo ничего не добавить в файл добавляет разрыв строки, использование NUL, кажется, бесконечно заполняет файл, и если вы попытаетесь выполнить несуществующую команду, DOSBox перенаправит фактический ответ ОС на этот текстовый файл. - person Nyerguds; 19.07.2021

Я только что пробовал в Windows:

copy con file.txt

Затем нажмите клавишу Enter. Затем нажмите Ctrl + Z и Enter.

И у меня это сработало.

Для Ubuntu обычно я создаю файл с помощью команды vi

vi file.txt

Он откроет файл. Затем нажмите клавишу Esc. Затем введите : wp и нажмите клавишу Enter. Будет создан новый файл с пустыми данными.

person ARJUN KP    schedule 15.07.2017
comment
В вопросе говорилось: Команда должна запускаться из сценария, поэтому нельзя использовать нажатия клавиш.. - person Peter Mortensen; 28.05.2021

. >> file.txt
  • >> добавляет стандартный вывод в файл.
  • . - это просто неправильная команда для передачи пустого стандартного вывода в >>

Однако вы увидите вывод стандартной ошибки в CMD:

'.' не распознается как внутренняя или внешняя команда, действующая программа или командный файл.

Вы можете подавить это сообщение об ошибке (если хотите), перенаправив стандартную ошибку на NUL.

. >> file.txt 2> nul
person Rain    schedule 19.10.2020
comment
Хорошая точка зрения. Проголосовали. Я забыл перенаправление stderr в моем собственном ответе. Я соответствующим образом отредактировал указанный ответ. - person VonC; 19.10.2020

Это изменит заголовок окна командной строки, но также создаст пустой файл.

title > file.txt
person ninix    schedule 27.08.2014
comment
Ожидание! На что он изменит заголовок окна командной строки? - person Peter Mortensen; 28.05.2021
comment
Пусто / без названия? - person Peter Mortensen; 30.05.2021

Запустите CMD в режиме администратора и введите следующее:

NUL > file_name.extention

Или вы набираете это

echo .> file_name.extention
person Lekens    schedule 28.04.2017
comment
Зачем нужен режим администратора (вопрос не риторический)? Пожалуйста, ответьте, отредактировав свой ответ, а не здесь, в комментариях (без Edit :, Update: или подобное - ответ должен выглядеть так, как если бы он был написан сегодня). - person Peter Mortensen; 28.05.2021

Сначала создайте свой файл, чтобы он существовал:

echo . > myfile.txt

Затем перезапишите созданный файл пустой версией с помощью команды copy:

copy /y nul myfile.txt
person Dowopfan    schedule 06.09.2013

echo. | set /p=>file

echo. подавляет активированную команду ECHO

| set /p= предотвращает перевод строки (и теперь файл имеет размер 0 байт)

person 131    schedule 12.05.2014

В качестве решения этого вопроса установите gVim. Во время установки не забудьте установить флажок «Создавать файлы .bat для использования в командной строке», как показано ниже.

Введите здесь описание изображения

Некоторые файлы bat, например vim.bat и gvim.bat, будут установлены в папку C: \ Windows. Добавьте C: \ Windows в системный Путь, если это еще не сделано.

Перезапустите cmd.exe и введите gvim empty_file.txt. Вы запустите gVim, чтобы отредактировать пустой файл с нуля. Если вы не хотите покидать консоль командной строки, введите вместо этого vim empty_file.txt.

person Eugene    schedule 20.10.2017

Есть и другие простые способы создания файлов.

Например, вы можете создать файл и открыть его с помощью блокнота из cmd

notepad newFile.txt

Вам будет предложено, что такого файла нет и вы хотите создать его как новый файл.

Вы можете создать любой подобный файл.

Например,

notepad newFile.js

OR

notepad newFile.py

Для этого можно использовать не только Блокнот, но и другие приложения. Например, вы можете использовать Visual Studio Code для создания и открытия новых файлов.

Например,

code newFile.py

Это создаст новый файл Python и откроет его в коде vs (если у вас установлен код vs).

Вы также можете создавать другие типы файлов с помощью этого метода.

person Irfan wani    schedule 20.02.2021
comment
Уже упоминалось несколько раз и каждый раз отбрасывалось, потому что требует вмешательства пользователя. - person Stephan; 20.02.2021