如何从批处理文件创建空文本文件?


244

谁能记得使用BAT文件在MSDOS中创建空文件的命令是什么?


3
同样在stackoverflow.com/questions/1702762上,“如何在命令行中创建一个空文件?”。
彼得·莫滕森

6
您不会混淆DOS和cmd.exe,是吗?
用户未知

自述文件:Set-Content "your_file.txt" .gitignore -Encoding utf8这是区分大小写的,并强制进行utf8编码!(我也将其发布为答案)。
Wolfpack'08

Answers:


235
echo. 2>EmptyFile.txt

49
这回呼换行符到stdout,但是...我的回答没有。
ephemient

7
有时是相关的;以前我一直在摸摸,直到我出于复制0字节文件的目的而只是复制NUL(或键入NUL> file)的想法。:-)
乔伊(Joey)

18
要将ephemient的答案与该答案合并,您可以执行以下操作:“ echo。> NUL 2> EmptyFile.txt”获得相同的结果而无需输出换行符
cmptrgeekken

7
为什么.echo.
Ninh Pham 2014年

3
@Reegan如果使用echo 2没有.,控制台会读“ECHO处于关闭状态。” 使用echo. 2有效地只显示一个换行符沉默控制台输出。
OneManBand 2014年

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反正
ephemient

2
输入nul> EmptyFile.txt是最短的解决方案。您的答案还是比接受的解决方案更好,因为您的文件将真的为空。+1
TPAKTOPA 2015年

3
警告:是的,问题在于如何创建一个空文件,但是通常您要“确保该文件存在”。使用该copy /Y NUL命令时,可能会擦除现有内容。如果您习惯了Unix的touch命令,那么这可能根本不是您所期望的。)type NUL >> emptyfile.txt在这方面使用更安全。
eckes,2015年

CON除了此答案中链接的内容之外,我没有找到有关的任何信息。有人可以分享一些阅读吗?
Sinjai

182
type NUL > EmptyFile.txt

在阅读了前两篇文章后,我想到了两者的融合。看起来有点干净。无需担心重定向“复制的1个文件”。消息NUL,就像上一篇文章所做的那样,ECHO OutputLineFromLoop >> Emptyfile.txt通常在批处理文件中后面的旁边看起来不错。


13
+1这是自然的,首先想到,不与标准错误等的诡计
阿米特·奈杜

2
你是对的。此方法避免了复制命令上的/ y标志。
djangofan 2013年

简短易行。此处的其他一些解决方案不会创建零字节的新文件!
Christian St.

66

我从其他答案中收集的技术:

使0字节文件非常清晰,向后兼容:

type nul >EmptyFile.txt

想法通过:匿名Danny Backett,可能还有其他人自己受JdeBP的工作启发

一个0字节的文件,换句话说,向后兼容:

REM. >EmptyFile.txt

想法通过:约翰内斯

0字节文件的第三种方式也是向后兼容的:

echo. 2>EmptyFile.txt

想法通过:TheSmurf

从Windows 2000开始,一个0字节的文件可能是系统可用的方式

fsutil file createnew EmptyFile.txt 0

想法通过:Emm

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字节的文件:无效命令/具有随机名称(兼容性:uknown):

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

通过:大洪黄长发随机

编辑2 Andriy M 指出了通过无效命令来实现这一目标的最有趣/最发人深省的方式

0字节的文件:无效的命令/时髦的方式(兼容性:未知)

*>EmptyFile.txt

想法通过:Andriy M

0字节文件第4种进入方式

break > file.txt

通过理念:foxidrive感谢评论双重节


type nul ...type <nul ...,其实。
Andriy M

@AndriyM谢谢您,对了,我进行了编辑!没注意到,因为很有趣,它可以与错误的代码一起使用。这可能意味着任何无效的命令重定向到文件名都会创建一个空文件!刚刚尝试过NonExistentCommand <nul >EmptyFile.txt,它起作用了
n611x007

由于依靠硬编码的命令名期望它“无效”是不安全的,所以我添加了一个随机的命令名选项
n611x007

2
还有一个:break > file.txt道具foxidrive
Gras Double

3
>>如果您需要“必须存在,但不应该被截断” ,大多数命令都可以使用(就像Unix touch一样)
eckes 2015年

25

REM。>空文件


我坚持使用Windows CE,这是创建和清空文件的唯一答案!其他方法要么添加空白行,要么根本不起作用……
AntonyG

此解决方案的唯一问题是,如果当前目录中存在一个名为REM的文件,而您键入REM.,则cmd将以“'rem”响应。不被识别为内部或外部命令,可操作程序或批处理文件。”
DodgyCodeException

@DodgyCodeException,使用rem/代替而不是rem.解决该问题...
aschipfl

@aschipfl谢谢,这很有趣。同样有趣的是,2010年的答案如何彼此隔开几年。缓慢的wwwww对话!
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 2015年

是的,我同意^^允许您更新您的讨论内容。
Nam G VU 2015年

@NamGVU可以将引号留在原处,无论文件名是否长。我想如果它是从命令行输入的短文件名,那么您就不需要不必要的输入。
foxidrive

我建议从此答案中删除第二行。到目前为止,这是IMO在此问题上的最佳答案,但是第二行并没有真正增加价值,除非尝试使用它的人不了解命令行的空白处理基础。
kayleeFrye_onDeck

2

您可以使用TYPE命令代替COPY。试试这个:

TYPE File1.txt>File2.txt

哪里File1.txt是空的。


3
您也可以type NUL>File2.txt
Danny Beckett

6
顺便说一句,如何获取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
这将创建一个带有空格字符,后跟回车符,后跟换行符的文件- 不是空文件。
Andriy M 2014年

值得看一下我的答案(如下),因为它会更改编码。
Wolfpack'08

-3

重要:

如果不设置编码,许多软件可能会崩溃。git是一个非常受欢迎的示例。

Set-Content "your_ignore_file.txt" .gitignore -Encoding utf8 这是区分大小写的,并强制进行utf8编码!


3
编码与创建文件有何关系?空字节文件不需要任何编码,用BOM标记它(0字节)很棘手
jeb

@jeb,因为人们会填充空文件,并且当填充的文件用作设置文件时,如果不是UTF8,则会创建错误。实际上,我会说人们几乎总是填充文件并且不会将它们留为空白,并且我不会使用任何其他方法来创建以后打算更改的空白文件,因为我几乎总是想确定自己的文件是UTF8。例如,github上的.git教程要求用户创建一个空白文件,稍后再填充,而另一种方法则使用奇怪的Windows编码来创建文件。
Wolfpack'08
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.