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

244

Может кто-нибудь вспомнить, какой была команда для создания пустого файла в MSDOS с использованием BAT-файла?

m_pGladiator
источник
3
Также на stackoverflow.com/questions/1702762 , «Как создать пустой файл в командной строке?».
Питер Мортенсен
6
Вы не путаете DOS и cmd.exeне так ли?
пользователь неизвестен
ЧИТАЙТЕ МНЕ: Set-Content "your_file.txt" .gitignore -Encoding utf8это чувствительно к регистру и требует кодировки utf8! (Я также отправил это как ответ).
Wolfpack'08

Ответы:

235
echo. 2>EmptyFile.txt
TheSmurf
источник
49
Это перекликается с новой строкой в ​​stdout, хотя ... мой ответ - нет.
Эфимент
7
Иногда это актуально; Раньше у меня было касание, пока я не получил идею просто скопировать NUL (или набрать NUL> файл) с целью получения 0-байтовых файлов. :-)
Joey
18
Чтобы объединить ответ ephemient и этот, вы можете сделать: «echo.> NUL 2> EmptyFile.txt», чтобы получить те же результаты без вывода новой строки
cmptrgeekken
7
Почему .вecho.
Нин Фам
3
@Reegan Если вы используете echo 2без ., консоль будет читать «ECHO выключен». Использование echo. 2эффективно заставляет консольный вывод выводить только на новую строку.
OneManBand
362
скопировать NUL EmptyFile.txt

В DOS есть несколько специальных файлов (фактически устройств), которые существуют в каждом каталоге, NULчто эквивалентно UNIX /dev/null: это волшебный файл, который всегда пуст и выбрасывает все, что вы пишете в него. Вот список некоторых других; CONиногда полезно также.

Чтобы вообще не иметь выхода, вы можете использовать

copy / y NUL EmptyFile.txt> NUL

/yне позволяет copyзадать вопрос, который вы не видите, когда вывод идет NUL.

ephemient
источник
36
+1 - вопрос содержит пустой файл, поэтому принятый ответ неверен.
Джо
9
Решение DannySmurf фактически создает пустой файл - новая строка переходит в stdout, ничего не переходит в stderr (направляется в новый файл). Но спасибо за +1 в любом случае
эпим
2
введите nul> EmptyFile.txt - самое короткое решение. Тем не менее, ваш ответ лучше принятого решения, потому что ваш файл будет действительно пустым. +1
TPAKTOPA
3
Предупреждение: да, вопрос заключался в том, как создать пустой файл, однако обычно вы хотите «убедиться, что файл существует». При использовании copy /Y NULкоманды это может стереть существующий контент. Если вы привыкли к touchкоманде Unix , это может совсем не соответствовать вашим ожиданиям.) Использование type NUL >> emptyfile.txtв этом отношении более безопасно.
Eckes
Я не смог найти никакой информации CON, кроме того, что указано в этом ответе. Может ли кто-нибудь поделиться легким чтением?
Синджай
182
type NUL > EmptyFile.txt

После прочтения двух предыдущих постов, эта смесь двух - вот что я придумал. Кажется, немного чище. Нет необходимости беспокоиться о перенаправлении «1 файла (ов)». сообщение NUL, как и в предыдущем посте, и выглядит хорошо рядом с тем, ECHO OutputLineFromLoop >> Emptyfile.txtчто обычно следует в пакетном файле.

Кевин К
источник
13
+1 это первое, что приходит на ум, а не ухищрения с stderr и т. Д.
Амит Найду
2
Ты прав. Этот метод позволяет избежать флага / y в команде копирования.
Джангофан
Коротко и просто. Несколько других решений здесь не создают новый файл с нулевыми байтами!
Кристиан Св.
66

Техники, которые я собрал из других ответов:

Делает 0-байтовый файл очень понятным, обратно совместимым способом:

type nul >EmptyFile.txt

идея через: анонимный , Дэнни Бакетт , возможно, другие, я вдохновлен работой JdeBP

0-байтовый файл по-другому , он выглядит обратно совместимым:

REM. >EmptyFile.txt

идея через: Йоханнес

0-байтовый файл также выглядит как обратно совместимый:

echo. 2>EmptyFile.txt

идея через: TheSmurf

0-байтовый файл - систематический способ, вероятно, доступный с Windows 2000:

fsutil file createnew EmptyFile.txt 0

идея через: Эмм

Файл 0 байт перезаписывает файлы только для чтения

ATTRIB -R filename.ext>NUL
(CD.>filename.ext)2>NUL

идея через: авторское право

Одна новая строка (2 байта: 0x0D 0x0Aв шестнадцатеричной записи , альтернативно записывается как \r\n):

echo.>AlmostEmptyFile.txt

Примечание: нет пространства между echo, .и >.

идея через: Как вы можете повторить новую строку в пакетных файлах?


edit Кажется, что любая неверная команда, перенаправленная в файл, создаст пустой файл. хех, фича! совместимость: неизвестно

TheInvisibleFeature <nul >EmptyFile.txt

Файл 0 байт: недопустимая команда / со случайным именем (совместимость: неизвестна):

%RANDOM%-%TIME:~6,5% <nul >EmptyFile.txt

через: отличный источник для случайных Хунг Хайн

править 2 Андрей М указывает на, вероятно, самый забавный / провокационный способ добиться этого с помощью неверной команды

Файл в 0 байт: неверная команда / забавный способ (совместимость: неизвестна)

*>EmptyFile.txt

идея через: Андрей М

0-байтовый файл 4-й путь :

break > file.txt

Идея с помощью: foxidrive благодаря комментарий от Double Гра !

n611x007
источник
Это type nul ...не type <nul ..., на самом деле.
Андрей М
@AndriyM спасибо, ты прав, я внес изменения! Не заметил, потому что достаточно интересно, что он работает с неправильным. Это может означать, что любая неверная команда, перенаправленная на имя файла, создаст пустой файл! только что попробовал, NonExistentCommand <nul >EmptyFile.txtи это сработало
n611x007
так как было бы небезопасно полагаться на жестко закодированное имя команды, ожидая, что оно будет «недействительным», я добавил
случайную
2
Еще один: break > file.txtподпорки foxidrive
Gras Double
3
И большинство команд можно использовать, >>если вам нужно «должно существовать, но не должно быть усечено, если существует» (как это touchделает Unix )
eckes
25

Денежный перевод > empty.file

Johannes
источник
Я застрял на Windows CE, и это единственный ответ, который создает и пустой файл! Другие подходы либо добавляют пустую строку, либо просто не работают ...
AntonyG
Единственная проблема, связанная с этим решением, заключается в том, что если в текущем каталоге есть файл с именем REM, и вы вводите REM., cmd ответит «rem». не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл. "
DodgyCodeException
@DodgyCodeException, используя rem/вместо того, rem.чтобы решить эту проблему ...
aschipfl
@aschipfl спасибо, это интересно. Также интересно, как в этом ответе от 2010 года комментарии отстоят друг от друга на несколько лет. Медленный разговор!
DodgyCodeException
8

Если существует вероятность того, что файл для записи уже существует и доступен только для чтения, используйте следующий код:

ATTRIB -R filename.ext
CD .>filename.ext

Если файла не существует, просто выполните:

CD .>filename.ext

(обновлен / изменен код в соответствии с комментарием DodgyCodeException)

Чтобы устранить любые ошибки, которые могут возникнуть:

ATTRIB -R filename.ext>NUL
(CD .>filename.ext)2>NUL
script'n'code
источник
1
Единственная проблема, связанная с этим решением, заключается в том, что если CDв текущем каталоге есть файл с именем (без расширения) и вы CD.введете команду , cmd ответит «CD». не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл. " Если вы вместо этого наберете CD .(с пробелом перед точкой), он будет работать.
DodgyCodeException
7
fsutil file createnew file.cmd 0
Эм
источник
Утилита FSUTIL требует наличия прав администратора.
DodgyCodeException
fsutil не является стандартной утилитой в MS-DOS.
Бернхард Эрикссон
7

Еще один, чтобы добавить к книгам - короткий и сладкий, чтобы напечатать.

break>file.txt
break>"file with spaces in name.txt"
foxidrive
источник
Я думаю, что мы пропустили цитаты
Nam G VU
@NamGVU Кавычки используются в целевом имени файла, если вы решите использовать элементы длинного имени файла, такие как пробел или & и т. Д. Они не являются частью содержимого файла.
foxidrive
Да, я согласен ^^ Разрешение на обновление вашего, как обсуждалось.
Nam G VU
@NamGVU Кавычки можно оставить на месте с длинным именем файла или без него. Я предполагаю, что если он набирается из командной строки с коротким именем файла, то вам не понадобится лишняя печать.
Foxidrive
Я предлагаю удалить вторую строку из этого ответа. IMO, это лучший ответ на этот вопрос, но вторая строка на самом деле не добавляет ценности, если человек, пытающийся ее использовать, не знает основ обработки пустого пространства для командной строки.
kayleeFrye_onDeck
2

Вы можете использовать TYPEкоманду вместо COPY. Попробуй это:

TYPE File1.txt>File2.txt

Где File1.txtпусто.

Кевин К
источник
3
Вы также можете сделатьtype NUL>File2.txt
Дэнни Беккет
6
Кстати, как получить File1.txt?
TomeeNS
1

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

set x=x > EmptyFile.txt

Или, если вы не хотите создавать дополнительную переменную, переназначьте существующую переменную, например

set PROMPT=%PROMPT% > EmptyFile.txt

или вот так:

set "PROMPT=%PROMPT%" > EmptyFile.txt
PeterE
источник
0

Есть бесконечные подходы.

Команды, которые ничего не выводят:

break
cls
color
goto
pushd
popd
prompt
title

Странные команды:

CD.
REM.
@echo off
cmd /c
START >FILE

Устаревшая printкоманда создает пустой файл:

print /d:EMPTY_TEXT_FILE nul
HackingAddict1337
источник
-2

Самый простой способ это:

echo. > Filename.txt

Batchman
источник
8
Это создаст файл с символом пробела, за которым следует символ возврата каретки, за которым следует символ новой строки, а не пустой файл.
Андрей М
Стоит посмотреть на мой ответ (ниже), потому что он меняет кодировку.
Wolfpack'08
-3

ВАЖНЫЙ:

Если вы не установите кодировку, многие программы могут сломаться. мерзавец является очень популярным примером.

Set-Content "your_ignore_file.txt" .gitignore -Encoding utf8 это с учетом регистра и требует кодировки utf8!

Wolfpack'08
источник
3
Какое отношение имеет кодировка для создания пустого файла? Файл нулевой байт не требует кодирования и это сложно , чтобы пометить его с BOM (0 байт)
Джеб
@jeb, потому что люди заполняют пустые файлы, и когда заполненные файлы используются в качестве файлов настроек, они создают ошибки, когда они не являются UTF8. На самом деле, я бы сказал, что люди почти всегда заполняют файлы и не оставляют их пустыми, и я бы не использовал какой-либо другой метод для создания пустого файла, который я позже намеревался изменить, потому что я почти всегда хотел быть уверен, что мои файлы UTF8. Например, учебник .git на github просит пользователя создать пустой файл, который будет заполнен позже, а другой метод создает файл со странной кодировкой Windows.
Wolfpack'08