ChatGPT解决这个技术问题 Extra ChatGPT

如何在 Windows 的命令行中创建一个空文件?

如何在 DOS/Windows 命令行中创建一个空文件?

我试过了:

copy nul > file.txt

但它总是显示一个文件被复制。

标准cmd中有另一种方法吗?

它应该是不需要 Cygwin 中的 touch 命令或任何其他非标准命令的方法。该命令需要从脚本运行,因此不能使用击键。

刚刚发现一个真正的批处理命令导致一个空文件(0 字节):我已经更新了我的答案。
重复:stackoverflow.com/questions/210201,“如何从批处理文件创建空文本文件?”。 (但是,恕我直言,这里的答案更好。)
是的,创建命令 copy nul > file.txt 时包含文本“已复制 1 个文件”。未创建空文件。
这对我来说只是证明如果你不能用一个命令创建一个普通的空文件,MS-DOS 就是垃圾。
@KolobCanyon:当然,您可以根据已经发布的答案。但是你真的认为快速创建空文件的能力应该是面向最终用户并需要在 16K 内存中运行的操作系统的优先事项吗?毕竟,这不是一件特别有用的事情,除了少数罕见的边缘情况。

V
VonC

没有重定向,Luc VuErik Konstantopoulos point out 到:

copy NUL EMptyFile.txt
copy /b NUL EmptyFile.txt

"How to create empty text file from a batch file?" (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

Nomad 提到 an original one

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 建议 in the comments

我使用的最短的基本上是 Nomad 的:

.>out.txt

它确实给出了一个错误:

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

但是这个错误在stderr上。并且 > 仅重定向标准输出,其中 没有 已生成。
因此创建了一个 empty 文件。
此处可以忽略错误消息。或者,如 Rainanswer,重定向到 NUL

.>out.txt 2>NUL

(原始答案,2009 年 11 月)

echo.>filename

echo "" 实际上会将“”放入文件中!而没有“.”的 echo 会将“Command ECHO activated”放入文件中...)

注意:生成的文件不是空的,而是包含一个返回行序列:2 个字节。

discussion 指向真正的 empty 文件的真正批处理解决方案:

 <nul (set/p z=) >filename

 dir filename
 11/09/2009  19:45                 0 filename
 1 file(s)                         0 bytes

"

因为这里的“等号右边的字符串”是空的......结果是一个空文件。

cd. > filename 的区别(在 Patrick Cuff's answer 中提到并且也生成一个 0 字节长度的文件)是这种“重定向位”(<nul... 技巧)可用于回显行没有任何 CR

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

dir 命令应将文件大小指示为 11 个字节:“helloworld!”。


您实际上想要 echo.>filename 因为它将包含空格和换行符。
使用 rem 命令可避免创建包含空行的文件。
努法尔·易卜拉欣:别让这个骗了你;只需查看下一个答案,它有一个更简单且同样有效的解决方案。这里所做的在第一种情况下是部分错误的(不是空的,但包含换行符),而在第二种情况下过于复杂。
我使用的最短的基本上是 Nomad 的:".>out.txt" :)
@barlop是的:这就是重点:它会在stderr上触发一些错误消息,但在stdout上触发nothing(空字符串)。 > 仅将标准输出重定向到 out.txt。因此创建了一个空文件。您可以忽略此上下文中的错误消息。
T
Tim Cooper

尝试这个:

type NUL > 1.txt

这肯定会创建一个空文件。


这会将“NUL is ./NUL”添加到文件中
A
Adam Liss

这是另一种方式:

cd . > filename

cd. > filename 对我不起作用,而不是 cd > filename 起作用!
“cd.> filename”创建空文件,否则您将使用“cd > filename”命令在新创建的文件中打印文件路径。
使用:cd . > filename.extension 表示您需要在 cd. 之间留一个空格
q
qid

如果你真的想要一个完全空的文件,没有任何输出到标准输出,你可以作弊一点:

copy nul file.txt > nul

只需将 stdout 重定向到 nul,复制的输出就会消失。


如果 file.txt 存在,它会失败。
我理解这个问题,如果文件存在失败是好的行为。
+1。令人惊讶的是,公认的答案是半错半错的,而明显正确的答案却几乎没有得到任何认可。添加到此: type nul>file 将是另一种方式。
@Joey 被接受的有一堆解决方案,可以创建一个空的 0 字节文件。
@barlop:作为参考,在撰写评论时,this 是公认的答案。每次我在评论中引用的答案发生变化时,我都不会收到通知。
6
6 revs, 3 users 79%

打开文件:

type file.txt

新文件:

方式一:输入 nul > file.txt

方式2:echo 这是一个示例文本文件 > sample.txt

方式3:记事本myfile.txt <按Enter>

编辑内容:

notepad file.txt

复制

copy file1.txt file1Copy.txt

改名

rename file1.txt file1_rename.txt

删除文件:

del file.txt

比 CTRL + C 更多 > filename.txt。
c
cure
call>file.txt

这是我所知道的最干净的方式。


这是什么“干净”?
它不向文件输出任何内容,同时易于记忆和使用。
这是最简单、最容易记住的解决方案。
它是如何工作的?它正在调用具有空名称的脚本(?)结果和可能的副作用是什么(例如,标准错误)?没有不那么晦涩的方法吗?不能用 ZZ 代替 call(不是说它不那么晦涩)? - 像 Nomad's answer
@PeterMortensen 它调用了一个不存在的子例程(因为不能有一个未命名的子例程)。它不会导致错误,您可以通过运行 call && echo testcall || echo test 进行测试。和/或基于前一个命令的错误级别。此外,您引用的答案表明它是一个更好的解决方案,非常危险。正如其他人在对该答案的评论中已经指出的那样,取决于一个不存在的命令是很糟糕的,因为如果它确实存在,你只是在不知道它做什么的情况下运行它,可能拥有比它应该拥有的更多权限。
P
Peter Mortensen
echo "" > filename

我相信这适用于 Windows/DOS,但我最后一次亲身体验是很久以前的事了。我确实知道它基本上可以在任何符合 POSIX 的操作系统上运行。


显然,VonC 的回答比我的要好,所以请改为投票。
不幸的是: echo "" 显示双引号,并且当流重定向到文件时它们被写入文件。同样的情况也发生在: echo > filename 因为它也将 ECHO is off/on 写入文件。
也许您可以在创建文件之前将“@echo off”放在行中以规避它?
P
Peter Mortensen

在 Windows 命令行上,一种方法是使用 fsutil

fsutil file createnew <filename> <size>

一个例子:

fsutil file createnew myEmptyFile.txt 0

下面是 *nix 命令行。

touch filename

此命令更改文件的修改日期或在未找到文件时创建它。


不幸的是,这个问题特别指出,“没有来自 Cygwin 的触摸命令。”
touch 命令存在非 Cygwin 实现:unxutils.sourceforge.net 很好。
在 *nix 中,我个人偏爱一个简单的 > filename,它也可用于截断现有文件。
fsutil 需要管理权限。简单地创建一个空文件有点要求...
@Joey 所有这些命令创建一个空文件不是有点多吗?当你习惯了触摸时,即使是120分以下的也很多。
P
Paul Nathan

你可以写你自己的触摸。

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

S
Subhashi
cd > filename.cfg 

在您无权直接创建文件的 C:/Program Files 中创建文件时工作。


应该发生什么?它是如何规避基本安全的?你能详细说明吗?最好在 editing your answer 之前,不要在评论中(without“Edit:”、“Update:”或类似的 - 答案应该看起来好像是今天写的)。
P
Peter Mortensen

要创建任何类型的文件,您可以使用以下代码

type nul > (file_name).(file_type)

例如,如果你想创建一个文本文件,那么

type nul > demo.txt

如果你想创建一个 JavaScript 文件,那么

type nul > demo.js

P
Peter Mortensen

您可以创建一个空文件

'' > newfile.txt

导航到该目录并在 PowerShell 窗口中键入上述命令。

请注意,这不适用于 Windows 命令提示符。


f
foxidrive

另一种创建零字节文件的方法:

break > "file.txt"

它是如何工作的?什么是操作理论? break is an unknown command,只导致输出到标准错误?或者是其他东西?
P
Peter Mortensen

copy con SomeFile.txt 输入

Ctrl + Z 并回车。


我明确了命令将从脚本运行的问题,所以不幸的是,任何键盘交互都不起作用。还是非常感谢。
0
0x6773

在命令提示符中使用 copy > your_file_name.extension

P:\excecise> copy > Sample.txt

什么是“执行力”?你是说exercise吗?或者是其他东西?
P
Peter Mortensen

type nul > filename 将创建一个新的空文件。

copy nul filename 也可以在没有重定向的情况下工作(更明显的解决方案)。


至少它不是一个晦涩难懂的解决方案,就像许多其他答案一样。
T
Tim Cooper

您还可以使用:

echo. 2>foo

echo. 的调试输出几乎肯定是空的。


N
Nomad

试试这个:abc > myFile.txt 首先,它将在当前工作目录(在命令提示符中)创建一个名为 myFile.txt 的文件。然后它将运行不是有效命令的命令 abc。这样,您就得到了一个名为 myFile.txt 的新空文件。


如果 abc 在路径中并且是格式化除安装目录之外的所有驱动器的便捷函数,这可能是非常错误的。
P
Peter Mortensen

这对我有用,

echo > file.extension

这是我今天发现的另一种方式。我从其他答案中得到了想法,但它奏效了:

sometext > filename.extension

例如,

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 命令,该文件也正在目录中创建。


控制台应用程序可以读取/写入的“句柄”不止一个。标准的有:(0) STDIN、(1) STDOUT 和 (2) STDERR。我相信您的技巧在这里起作用的原因是因为所有输出都将发送到错误句柄,但您只是将 STDOUT 定向到文件。尝试这样做:“xyz > emptyfile.txt 2>&1”将 STDERR 重定向到正在使用的任何 STDOUT,这恰好重定向到“emptyfile.txt”。您现在应该在该文件中看到错误消息。
第一个不会导致空文件。它将包含 13 个字符(11 个普通字符 + CR + LF):“ECHO 开启。”
P
Peter Mortensen

您可以使用旧命令

copy con file_name.ext

不要输入任何内容。只需按 F6 即可保存。但是,它会打印“文件已复制”,但是当您打开文件时,它将是空的。


这是如何运作的?为什么它有效? con 是一些保留的东西吗?你能详细说明吗?请通过 editing your answer 回复,而不是在评论中(没有“编辑:”、“更新:”或类似内容 - 答案应该看起来好像是今天写的)。
正如我所写,不要输入任何内容,只需按 F6
P
Peter Mortensen
. >> file.txt

>> 将标准输出附加到文件中

.将空标准输出传递给 >> 只是一个错误的命令

但是,您会在 CMD 中看到 standard error 的输出:

'。'不被识别为内部或外部命令、可运行程序或批处理文件。

您可以通过将标准错误重定向到 NUL 来禁止显示此错误消息(如果需要)。

. >> file.txt 2> nul

s
suhao399

我读了很多线程,但这不是最短的方法。

请使用命令:

>copy /b NUL empty_file.txt


为什么它有效?什么是操作理论?例如,为什么前面的 > 是必要的(不是反问)?
> 在行首通常显示您仅在命令行中键入文本。此副本 NUL 文件(包含 0 个字节)。所以它应该工作。
P
Peter Mortensen

尝试这个:

echo $null >> filename 

请参阅:Equivalent of Linux touch to create an empty file with PowerShell


P
Peter Mortensen

在 Windows 上

我试着这样做

echo off > fff1.txt

它创建了一个名为 fff1.txt 的文件,文件大小为 0 KB。

除此以外,我没有找到任何可以创建空文件的命令。

注意:您必须位于要创建文件的目录中。


如果需要,不要忘记在创建文件后回显。
我不确定为什么会这样,但我猜你应该在输入上述命令后执行“echo on”。
回复“除此之外,我没有找到任何可以创建空文件的命令。”:所以您没有在这里查看之前的 30 多个答案中的任何一个?
P
Peter Mortensen

创建一个内容为 echo '' > %1 的 bat 文件(将文件命名为 touch.bat)。

将文件夹添加到 PATH 环境变量。

您可以使用触摸来创建文件。 (例如:touch temp.txt 创建 temp.txt 文件)

查看 this article 了解更多信息。


P
Peter Mortensen

还有一种方式:

copy nul 2> empty_file.txt

为什么它有效?什么是操作理论?
P
Peter Mortensen

我刚刚在 Windows 中尝试过:

copy con file.txt

然后按 Enter 键。然后按 Ctrl + Z 并回车。

它对我有用。

对于 Ubuntu,我通常使用 vi 命令创建文件

vi file.txt

它将打开文件。然后按 Esc 键。然后输入 :wp 并按 Enter 键。它将创建一个包含空数据的新文件。


问题是“该命令需要从脚本运行,因此不能使用击键。”。
P
Peter Mortensen

这是另一种方式:

rem/ > file.ext

斜杠 / 是强制性的;没有它,重定向部分将被 rem 注释掉。


与这里的许多其他解决方案不同,这实际上在 DOSBox 中有效。尝试在文件中不添加 echo 会添加换行符,使用 NUL 似乎会无休止地填充文件,如果您尝试执行不存在的命令,DOSBox 会将实际操作系统响应重定向到文本文件。
P
Peter Mortensen

还有其他简单的方法来创建文件。

例如,您可以从 cmd 创建文件并使用记事本打开它

notepad newFile.txt

这将提示您没有这样的文件以及是否要将其创建为新文件。

您可以像这样创建任何类型的文件。

例如,

notepad newFile.js

或者

notepad newFile.py

不仅记事本,您还可以使用其他应用程序来执行此操作。例如,您可以使用 Visual Studio Code 创建和打开新文件。

例如,

code newFile.py

这将创建一个新的 Python 文件并在 vs code 中打开它(如果您安装了 vs code)。

您也可以使用此方法创建其他类型的文件。


已经提到过几次,每次都被丢弃,因为它需要用户干预。
n
nhahtdh

首先创建您的文件,使其存在:

echo . > myfile.txt

然后使用 copy 命令用空版本覆盖创建的文件:

copy /y nul myfile.txt