Як створити порожній текстовий файл із пакетного файлу?


244

Чи хтось може пригадати, якою була команда створити порожній файл у MSDOS за допомогою файлу BAT?


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

49
Це повторює новий рядок для stdout, хоча ... моя відповідь не відповідає.
ефеміент

7
Іноді це актуально; Мені раніше доводилося лежати, поки не з'явилася ідея просто копіювати NUL (або ввести файл NUL>), щоб отримати 0-байтові файли. :-)
Joey

18
Щоб об'єднати відповідь ефефера і цю, ви можете зробити: "ехо.> 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іноді також корисний.

Щоб уникнути взагалі жодного виводу, ви можете використовувати

копіювати / y NUL EmptyFile.txt> NUL

/yзаважає copyзадавати питання, яке ви не бачите, коли йде вихід NUL.


36
+1 - запитання містить порожній файл, тому прийнята відповідь неправильна.
Джо

9
Рішення DannySmurf насправді створює порожній файл - новий рядок переходить до stdout, нічого не переходить до stderr (спрямований у новий файл). Але спасибі за +1 у будь-якому випадку
ефемія

2
type 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 це природне, що спочатку спадає на думку, а не протиставлення стидера тощо.
Аміт Найду

2
Ви праві. Цей метод дозволяє уникнути прапора / y в команді copy.
djangofan

Короткий і легкий. Кілька інших рішень тут не створюють новий файл з нульовими байтами!
Крістіан Св.

66

Техніки я зібрав з інших відповідей:

Робить 0-байтний файл дуже чітким, сумісним назад:

type nul >EmptyFile.txt

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

Файл 0 байтів по-іншому , він виглядає зворотно сумісним:

REM. >EmptyFile.txt

ідея через: Йоганнес

Файл 0 байтів 3-го способу також супровідний:

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

ідея через: copyitright

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

echo.>AlmostEmptyFile.txt

Примітка: немає простору між echo, .і >.

Ідея за допомогою: Як можна повторити новий рядок у пакетних файлах?


редагувати Здається, що будь-яка недійсна команда, перенаправлена на файл, створить порожній файл. хе, особливість! сумісність: невідомо

TheInvisibleFeature <nul >EmptyFile.txt

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

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

через: чудове джерело для випадкових Хунга Хюна

редагувати 2 Андрій М вказує на, мабуть, найсмішніший / провокуючий спосіб досягти цього за допомогою недійсної команди

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

*>EmptyFile.txt

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

Файл розміром 0 байтів, 4-й шлях :

break > file.txt

Ідея з допомогою: foxidrive завдяки коментар від Double Гра !


Насправді це type nul ...не так type <nul ....
Андрій М

@AndriyM дякую, що ти маєш рацію, що я змінив! Не помітили, бо цікаво, що він працює з неправильним. що може означати, що будь-яка недійсна команда, перенаправлена ​​на ім’я файлу, створить порожній файл! щойно спробував, NonExistentCommand <nul >EmptyFile.txtі це спрацювало
n611x007,

оскільки було б небезпечно покластися на жорстко кодовану назву команди, очікуючи, що вона буде "недійсною", я додав варіант рандомізованого імені команди
n611x007

2
Ще один:, break > file.txtреквізит фоксидріве
Gras Double

3
І більшість команд можна використовувати, >>якщо вам потрібно "повинні існувати, але не повинні бути усічені, якщо існують" (як touchце робить Unix )
eckes

25

REM. > empty.file


Я застряг у 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

1
Єдина проблема цього рішення полягає в тому, що якщо CDу поточному каталозі є файл, який називається (без розширення), і ви введете CD., cmd відповість "" CD ". не розпізнається як внутрішня чи зовнішня команда, функціонуюча програма чи пакетний файл. " Якщо замість цього ввести CD .(з пробілом перед крапкою), він буде працювати.
DodgyCodeException


7

Ще одну книгу, яку потрібно додати - коротку та солодку на тип.

break>file.txt
break>"file with spaces in name.txt"

Я здогадуюсь ми пропустили котирування
Nam G VU

@NamGVU Котирування використовуються в імені цільового файлу, якщо ви вирішите використовувати довгі елементи назви файлів, такі як пробіл або & тощо. Вони не входять до вмісту файлу.
foxidrive

Так, я згоден ^ ^ Дозвіл на оновлення вашого, як було обговорено.
Нам Г ВУ

@NamGVU Котирування можуть залишатися на місці з довгим іменем файлу або без нього. Я думаю, якщо він введений з командного рядка з коротким ім'ям файлу, то вам не потрібно буде вводити зайве.
foxidrive

Я пропоную видалити другий рядок із цієї відповіді. IMO - це найкраща відповідь на питання поки що, але другий рядок насправді не додає цінності, якщо людина, яка намагається використовувати його, не знає основ керування білим пробілом для командного рядка.
kayleeFrye_onDeck

2

Ви можете використовувати TYPEкоманду замість COPY. Спробуйте це:

TYPE File1.txt>File2.txt

Де File1.txtпорожньо.


3
Ви також можете зробитиtype NUL>File2.txt
Danny Beckett

6
BTW, як отримати File1.txt?
TomeeNS

1

Ви також SETможете створити нульовий byteфайл наступним чином

set x=x > EmptyFile.txt

Або якщо ви не хочете створювати додаткову змінну, перепризначте існуючу змінну на зразок

set PROMPT=%PROMPT% > EmptyFile.txt

або так:

set "PROMPT=%PROMPT%" > EmptyFile.txt

0

Існує нескінченний підхід.

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

break
cls
color
goto
pushd
popd
prompt
title

Дивні команди:

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

Застаріла printкоманда створює порожній файл:

print /d:EMPTY_TEXT_FILE nul

-2

Найпростіший спосіб:

echo. > Filename.txt


8
Це створить файл із символом пробілу, а потім символом повернення каретки з новим символом рядка - не порожнім файлом.
Андрій М

Варто подивитися на мою відповідь (нижче), оскільки вона змінює кодування.
Wolfpack'08

-3

ВАЖЛИВО:

Якщо не встановити кодування, багато програмних програм можуть зламатися. git - дуже популярний приклад.

Set-Content "your_ignore_file.txt" .gitignore -Encoding utf8 це залежно від регістру і змушує кодування utf8!


3
Як кодування має відношення до створення порожнього файлу? Файл нульовий байт не вимагає кодування і це складно , щоб позначити його з BOM (0 байт)
Джеб

@jeb тому, що люди заповнюють порожні файли, а коли заповнені файли використовуються як файли налаштувань, вони створюють помилки, коли вони не є UTF8. Насправді я б сказав, що люди майже завжди заповнюють файли і не залишають їх порожніми, і я б не використовував жодного іншого методу для створення порожнього файлу, який я згодом мав намір змінити, бо я майже завжди хочу бути впевненим, що мої файли є UTF8. Наприклад, навчальний посібник .git на github просить користувача зробити порожній файл, який заповнюється пізніше, а інший метод робить файл із дивним кодуванням Windows.
Wolfpack'08
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.