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

494

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

Я старался:

copy nul > file.txt

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

Есть ли другой способ в стандартном cmd?

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

Grendler
источник
Только что обнаружил настоящую пакетную команду, приводящую к пустому файлу (0 байт): я обновил свой ответ.
VonC
3
Дубликат: stackoverflow.com/questions/210201 , «Как создать пустой текстовый файл из пакетного файла?». (Но, ИМХО, ответы здесь лучше.)
Питер Мортенсен
Да, команда copy nul> file.txt создана с текстом «1 файл (ов) скопирован». Пустой файл не создан.
Рипон Аль Васим
5
Для меня это просто доказывает, что MS-DOS является мусором, если вы не можете создать простой пустой файл с помощью одной команды.
Каньон Колоб
2
@KolobCanyon: вы можете, конечно, за ответы, уже размещенные. Но действительно ли вы считаете, что возможность быстрого создания пустого файла должна быть приоритетом для операционной системы, ориентированной на конечных пользователей и требующей работы в 16 КБ ОЗУ? В конце концов, это не очень полезная вещь, за исключением нескольких редких крайних случаев.
Гарри Джонстон

Ответы:

571

Без перенаправлении Люк Vu или Эрик Константопулос указывают вне к:

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

Кочевник упоминает оригинальный :

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. И >только перенаправляет стандартный вывод, где ничего не было произведено.
Отсюда и создание пустого файла. Сообщение об ошибке можно игнорировать здесь.


(Оригинальный ответ, ноябрь 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!".

VonC
источник
2
Вы бы на самом деле хотели, echo.>filenameпотому что он будет включать пробел, а также символ новой строки.
Agent_9191
1
Использование remкоманды позволяет избежать создания файла с пустой строкой.
Грег Хьюгилл
@ Agent_9191: правда, я обновил свой ответ. @Greg: не уверен, что вы имеете в виду: rem>filenameдает тот же результат (2 байта)
VonC
3
Нуфал Ибрагим: не позволяй этому обмануть тебя; просто посмотрите следующий ответ, который имеет гораздо более простое и одинаково работающее решение. То, что сделано здесь, частично неверно в первом случае (не пусто, но содержит разрыв строки), а во втором - слишком сложно.
Джои
1
@barlop Да: в этом суть: он вызывает некоторое сообщение об ошибке в stderr, но ничего (пустая строка) в stdout. И >перенаправить стандартный вывод только на out.txt. Отсюда и создание пустого файла. Вы можете игнорировать сообщение об ошибке в этом контексте.
VonC
270

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

type NUL > 1.txt

это определенно создаст пустой файл.

Джастин
источник
Это добавляет "NUL is ./NUL" в файл
dshgna
106

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

cd. > filename
Патрик Кафф
источник
11
cd. > filenameэто не работа для меня, а не cd > filename работает!
NaveenDA
3
«cd.> filename» создает пустой файл, иначе у вас будет напечатан путь к файлу во вновь созданном файле с помощью команды «cd> filename».
niketan
6
Используйте это: Это cd . > filename.extensionозначает, что вам нужно пространство между cdи.
Aion
77

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

copy nul file.txt > nul

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

QID
источник
1
Сбой, если файл .txt существует.
Грендлер
6
Сбой, если файл существует, это хорошее поведение, как я понимаю вопрос.
Wallyk
32
+1. Удивительно, как принятый ответ является чем-то наполовину неправильным и наполовину запутанным, в то время как явно правильный ответ почти не заслуживает доверия. Чтобы добавить к этому: type nul>fileбыл бы другой способ.
Джои
@ Придерживайтесь принятого решения, у которого есть множество решений, которые работают для создания пустого 0-байтового файла.
Барлоп
2
@barlop: Для справки, это был принятый ответ на момент написания комментария. Я не получаю уведомления каждый раз, когда меняется ответ, на который я ссылаюсь в комментарии.
Джои
48

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

type file.txt

Новый файл :

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

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

notepad file.txt

копия

copy file1.txt file1Copy.txt

Rename

rename file1.txt file1_rename.txt

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

del file.txt
iCrazybest
источник
Хороший обзор команд cmd
KargWare
32

Читая комментарии к моему посту, я должен признать, что неправильно прочитал вопрос.

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

fsutil file createnew <filename> <size>

Пример:

fsutil file createnew myEmptyFile.txt 0

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

touch filename

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

Нэш
источник
К сожалению, вопрос конкретно гласит: «Без команды касания от Cygwin».
QID
3
Существуют не-Cygwin реализации сенсорной команды: unxutils.sourceforge.net - это хорошо.
Грег Хьюгилл
В * nix я лично неравнодушен к простому > filename, который также можно использовать для усечения существующего файла.
Франк Фармер
fsutilнужны административные привилегии. Это слишком много, чтобы попросить просто создать пустой файл ...
Joey
@ Джои Не слишком ли много этих команд для создания пустого файла? Даже тот, который ниже со 120 очками - это много, когда вы привыкли к прикосновению.
Джонни
29
echo "" > filename

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

Kris
источник
2
К счастью, ответ VonC лучше, чем мой, поэтому, пожалуйста, подтвердите это.
Крис
3
К сожалению: echo "" отображает двойные кавычки, и они записываются в файл, когда поток перенаправляется на него. То же самое происходит с просто: echo> filename, потому что он пишет, что ECHO выключен / включен в файл.
Грендлер
Может быть, вы могли бы поставить "@echo off" в строке перед созданием файла, чтобы обойти это?
Крис
27
call>file.txt

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

nephi12
источник
Что в этом "чистого"?
GreenAsJade
4
он ничего не выводит в файл, в то время как его легко запомнить и использовать.
nephi12
Это было самое простое решение, которое работает и которое легче всего запомнить.
nhershy
12
cd > filename.cfg 

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

Subhashi
источник
11

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

//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;
}
Пол Натан
источник
6

скопировать con SomeFile.txt Enter

Ctrl-Z Enter

DRapp
источник
Я уточнил вопрос, что команда будет запускаться из скрипта, поэтому, к сожалению, любое взаимодействие с клавиатурой не работает. Все равно спасибо.
Грендлер
6

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

break > "file.txt"
foxidrive
источник
6

так что вы можете создать пустой файл с

'' > newfile.txt

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

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

Асвин 1054
источник
5

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

кочевник
источник
2
Это может быть очень неправильно, если он abcнаходится в пути и является удобной функцией для форматирования всех дисков, кроме каталога установки.
Кровоточащие пальцы
5

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

Извините, я опоздал.

ОБНОВЛЕНИЕ : также copy nul filenameработает без перенаправления (более очевидное решение).

EKons
источник
5

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

P:\excecise> copy > Sample.txt
Радж Кумар Мишра
источник
4

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

echo. 2>foo

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

Craig
источник
4

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

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

>copy /b NUL empty_file.txt

suhao399
источник
4

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

copy con file_name.ext

ничего не вводите, просто нажмите F6, чтобы сохранить его, однако он напечатает «Файл скопирован», но когда вы откроете файл, он будет пуст

Амадо Саладино
источник
4

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

введите nul> (имя_файла). (тип_файла)

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

введите nul> demo.txt

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

введите nul> demo.js

Даршан Джайн
источник
3

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

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.

Счастливчик
источник
1
Существует более одного «дескриптора», который консольные приложения могут читать / записывать. Стандартными являются: (0) STDIN, (1) STDOUT и (2) STDERR. Я полагаю, что причина вашего трюка в том, что весь вывод идет на обработку ошибки, а вы только направляете STDOUT в файл. Попробуйте выполнить: «xyz> emptyfile.txt 2> & 1», чтобы перенаправить STDERR на то, что использует STDOUT, что, как правило, перенаправляет на «emptyfile.txt». Теперь вы должны увидеть сообщение об ошибке внутри этого файла.
Брент Риттенхаус
3

На Windows я пытался сделать это

echo off > fff1.txt

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

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

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

Омкар Агравал
источник
не забудьте включить после создания файла, если вам нужно.
QMaster
Эта команда останавливает cmd после нажатия ENTER.
Кавин Раджу С
Я не уверен, почему это так, но я думаю, что вы должны сделать «echo on» после ввода вышеуказанной команды.
Омкар Агравал
3

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

copy nul 2>empty_file.txt
GadBro
источник
2

Просто я пробовал в окнах

copy con file.txt

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

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

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

vi file.txt

Он откроет файл, затем нажмите ESCклавишу, затем введите : wp, затем нажмите enterклавишу. Это создаст новый файл с пустыми данными.

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

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

Пранай Кумар
источник
1

Сегодня я обнаружил новый :)

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

title > file.txt
ninix
источник
1

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

NUL > file_name.extention

или вы печатаете это

echo .> file_name.extention
Lekens
источник
1

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

rem/ > file.ext

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

aschipfl
источник
0

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

echo . > myfile.txt

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

copy /y nul myfile.txt
Dowopfan
источник