Как создать пустой файл в командной строке в Windows? - PullRequest
444 голосов
/ 09 ноября 2009

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

Я пытался:

copy nul > file.txt

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

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

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

Ответы [ 32 ]

515 голосов
/ 09 ноября 2009

Без перенаправления , Люк Ву или Эрик Константопулос точка 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

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

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

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

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

.>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 должна указывать размер файла в 12 байтах: "hello world!".

255 голосов
/ 06 января 2013

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

type NUL > 1.txt

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

94 голосов
/ 09 ноября 2009

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

cd. > filename
74 голосов
/ 09 ноября 2009

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

copy nul file.txt > nul

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

43 голосов
/ 10 января 2015

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

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
31 голосов
/ 09 ноября 2009

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

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

fsutil file createnew <filename> <size>

Пример:

fsutil file createnew myEmptyFile.txt 0

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

touch filename

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

25 голосов
/ 09 ноября 2009
echo "" > filename

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

21 голосов
/ 25 октября 2013
call>file.txt

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

11 голосов
/ 09 ноября 2009

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

//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;
}
8 голосов
/ 01 марта 2018
cd > filename.cfg 

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

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