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

316

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

Я пробовал:

copy nul > file.txt

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

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

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

  • 0
    Только что обнаружил настоящую пакетную команду, приводящую к пустому файлу (0 байт): я обновил свой ответ.
  • 2
    Дубликат: stackoverflow.com/questions/210201 , «Как создать пустой текстовый файл из пакетного файла?». (Но, ИМХО, ответы здесь лучше.)
Показать ещё 4 комментария
Теги:
file
command-line

27 ответов

352
Лучший ответ

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

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 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

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

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

.>out.txt

Это дает ошибку:

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

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


(Оригинальный ответ, ноябрь 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" передает ответ a nul на команду set/p, что приведет к переменная, используемая для того, чтобы оставаться неизменной. Как обычно, с set/p, строка в справа от знака равенства отображается как приглашение без CRLF.

Так как здесь "строка справа от знака равенства" пуста... результатом является пустой файл.


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

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

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

  • 2
    вы бы на самом деле хотели echo.>filename потому что он будет содержать пробел и символ новой строки.
  • 1
    Использование команды rem позволяет избежать создания файла с пустой строкой.
Показать ещё 9 комментариев
200

Попробуйте следующее:

type NUL > 1.txt

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

  • 0
    Это добавляет "NUL is ./NUL" в файл
70

Здесь другой способ:

cd. > filename
  • 7
    cd. > filename не работает для меня вместо cd > filename работает!
  • 1
    «cd.> filename» создает пустой файл, иначе у вас будет напечатан путь к файлу во вновь созданном файле с помощью команды «cd> filename».
Показать ещё 1 комментарий
68

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

copy nul file.txt > nul

Просто перенаправляйте stdout на nul, а результат с копии исчезает.

  • 1
    Сбой, если файл .txt существует.
  • 6
    Сбой, если файл существует, это хорошее поведение, как я понимаю вопрос.
Показать ещё 4 комментария
30

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

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 file1.txt file1_rename.txt

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

del file.txt
25

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

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

fsutil file createnew <filename> <size>

Пример:

fsutil file createnew myEmptyFile.txt 0

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

touch filename

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

  • 0
    К сожалению, вопрос конкретно гласит: «Без команды касания от Cygwin».
  • 3
    Существуют не-Cygwin реализации сенсорной команды: unxutils.sourceforge.net - это хорошо.
Показать ещё 3 комментария
16
echo "" > filename

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

  • 2
    К счастью, ответ VonC лучше, чем мой, поэтому, пожалуйста, подтвердите это.
  • 3
    К сожалению: echo "" отображает двойные кавычки, и они записываются в файл, когда поток перенаправляется на него. То же самое происходит с просто: echo> filename, потому что он также записывает, что ECHO выключен или включен в файл.
Показать ещё 1 комментарий
11
call>file.txt

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

  • 0
    Что в этом "чистого"?
  • 3
    он ничего не выводит в файл, в то время как его легко запомнить и использовать.
Показать ещё 1 комментарий
7

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

Ctrl-Z Enter

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

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

//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;
}
5

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

break > "file.txt"
5

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

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

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

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

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

4

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

echo. 2>foo

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

2

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

P:\excecise> copy > Sample.txt
  • 0
    это правильно и работает для меня. Спасибо
2

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

Используйте команду:

>copy /b NUL empty_file.txt

1

Просто я пробовал в windows

copy con file.txt

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

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

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

vi file.txt

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

1

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

copy nul 2>empty_file.txt
1

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

echo > file.extension

Здесь другой способ, который я нашел сегодня, получил идеи от других ответов, но он работал

sometext > filename.extension

Eg.

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». Теперь вы должны увидеть сообщение об ошибке внутри этого файла.
1

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

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

title > file.txt
0

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

echo off > fff1.txt

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

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

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

  • 0
    не забудьте включить после создания файла, если вам нужно.
0

Как пользователь VIM в окнах, я не смог найти ответ в этом вопросе.

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

Изображение 7265

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

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

Надеюсь, что этот ответ поможет тем, кто хочет запустить VIM из окна командной строки при создании пустого файла.

0

Попробуйте следующее:

echo $null >> filename 

Смотрите: superUser

0

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

NUL > file_name.extention

или введите этот

echo .> file_name.extention
0

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

rem/ > file.ext

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

0
echo.|set /p=>file

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

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

0

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

echo . > myfile.txt

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

copy /y nul myfile.txt

Ещё вопросы

Сообщество Overcoder
Наверх
Меню