【问题标题】:How can I create an empty file at the command line in Windows?如何在 Windows 的命令行中创建一个空文件?
【发布时间】:2010-12-14 17:41:34
【问题描述】:

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

我试过了:

copy nul > file.txt

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

标准cmd中还有其他方法吗?

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

【问题讨论】:

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

标签: windows file cmd command-line


【解决方案1】:

没有重定向,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

但是这个错误在标准错误上。而&gt; 仅重定向标准输出,其中什么都没有产生
因此创建了一个 empty 文件。
此处可以忽略错误消息。或者,如Rainanswer,重定向到NUL

.>out.txt 2>NUL

(原始答案,2009 年 11 月)

echo.>filename

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

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


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

 <nul (set/p z=) >filename

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

&lt;nul”通过管道将nul 响应传递给set/p 命令,这将导致 变量过去保持不变。像往常一样使用set/p,字符串 等号右侧显示为没有 CRLF 的提示。

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


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

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

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

【讨论】:

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

试试这个:

type NUL > 1.txt

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

【讨论】:

  • 这会将“NUL is ./NUL”添加到文件中
【解决方案3】:

这是另一种方式:

cd . > filename

【讨论】:

  • cd. &gt; filename 对我不起作用,而不是 cd &gt; filename 起作用!
  • "cd.> filename" 创建空文件,否则您将使用“cd > filename”命令在新创建的文件中打印文件路径。
  • 使用这个:cd . &gt; filename.extension 表示您需要在cd. 之间留一个空格
【解决方案4】:

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

copy nul file.txt > nul

只需将stdout重定向到nul,copy的输出就消失了。

【讨论】:

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

打开文件:

type file.txt

新文件:

  • 方式一:type nul &gt; file.txt
  • 方式二:echo This is a sample text file &gt; sample.txt
  • 方式3:notepad myfile.txt 回车>

编辑内容:

notepad file.txt

复制

copy file1.txt file1Copy.txt

重命名

rename file1.txt file1_rename.txt

删除文件:

del file.txt

【讨论】:

  • more > filename.txt 比 CTRL + C.
【解决方案6】:

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

fsutil file createnew <filename> <size>

一个例子:

fsutil file createnew myEmptyFile.txt 0

下面是 *nix 命令行。

touch filename

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

【讨论】:

  • 不幸的是,问题明确指出,“没有来自 Cygwin 的触摸命令。”
  • touch 命令存在非 Cygwin 实现:unxutils.sourceforge.net 很好。
  • 在 *nix 中,我个人偏向于简单的&gt; filename,它也可用于截断现有文件。
  • fsutil 需要管理权限。简单地创建一个空文件有点要求...
  • @Joey 所有这些命令创建一个空文件不是有点多吗?即使是下面的120分,习惯了摸也不少。
【解决方案7】:
echo "" > filename

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

【讨论】:

  • 显然,VonC 的答案比我的好,所以请改为投票。
  • 不幸的是:echo "" 显示双引号,当流被重定向到文件时它们被写入文件。只是:echo > filename 也会发生同样的情况,因为它也会将 ECHO is off/on 写入文件。
  • 也许您可以在创建文件之前将“@echo off”放在行中以规避它?
【解决方案8】:
call>file.txt

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

【讨论】:

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

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

【讨论】:

  • 应该发生什么?它是如何规避基本安全的?你能详细说明吗?最好是editing your answer,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来好像是今天写的)。
【解决方案10】:

您可以编写自己的风格。

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

【讨论】:

    【解决方案11】:

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

    type nul > (file_name).(file_type)
    

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

    type nul > demo.txt
    

    如果你想创建一个 JavaScript 文件然后

    type nul > demo.js
    

    【讨论】:

      【解决方案12】:

      copy con SomeFile.txt 输入

      Ctrl + ZEnter

      【讨论】:

      • 我明确了命令将从脚本运行的问题,因此不幸的是,任何键盘交互都不起作用。还是谢谢你。
      【解决方案13】:

      你可以创建一个空文件

      '' > newfile.txt
      

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

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

      【讨论】:

        【解决方案14】:

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

        break > "file.txt"
        

        【讨论】:

        • 它是如何工作的?什么是操作理论? break is an unknown command,只导致输出到标准错误?还是别的什么?
        【解决方案15】:

        在命令提示符中使用copy &gt; your_file_name.extension 喜欢

        P:\excecise> copy > Sample.txt
        

        【讨论】:

        • 什么是“excecise”?你的意思是exercise?还是别的什么?
        【解决方案16】:

        你也可以使用:

        echo. 2>foo
        

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

        【讨论】:

          【解决方案17】:

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

          【讨论】:

          • 如果abc 在路径中并且是格式化除安装目录之外的所有驱动器的便利功能,这可能是非常错误的。
          【解决方案18】:

          这对我有用,

          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 开启。”
          【解决方案19】:

          type nul &gt; filename 将创建一个新的空文件。

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

          【讨论】:

          • 至少它不像许多其他答案那样晦涩难懂。
          【解决方案20】:

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

          请使用命令:

          &gt;copy /b NUL empty_file.txt

          【讨论】:

          • 为什么有效?什么是操作理论?例如,为什么前面的&gt; 是必要的(不是反问)?
          • > 在行首很常见,仅在命令行中显示您键入的文本。此副本 NUL 文件(包含 0 个字节)。所以它应该可以工作。
          【解决方案21】:

          试试这个:

          echo $null >> filename 
          

          见:Equivalent of Linux touch to create an empty file with PowerShell

          【讨论】:

            【解决方案22】:

            你可以使用旧命令

            copy con file_name.ext
            

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

            【讨论】:

            • 这是如何工作的?为什么它有效? con 是保留的东西吗?你能详细说明吗?请通过editing your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。
            • 正如我所写,不用输入任何内容,只需按 F6
            【解决方案23】:
            • 创建一个内容为 echo '' &gt; %1 的 bat 文件(将文件命名为 touch.bat)。
            • 将文件夹添加到 PATH 环境变量中。
            • 您可以使用触摸来创建文件。 (例如:touch temp.txt 创建 temp.txt 文件)

            查看this article了解更多信息。

            【讨论】:

              【解决方案24】:
              . >> file.txt
              
              • &gt;&gt;standard output 追加到文件中
              • . 只是将空标准输出传递给 &gt;&gt; 的错误命令

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

              '.'未被识别为内部或外部命令,可操作 程序或批处理文件。

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

              . >> file.txt 2> nul
              

              【讨论】:

              • 好点。赞成。我在自己的答案中忘记了 stderr 重定向。我已经相应地编辑了上述答案。
              【解决方案25】:

              另一种方式:

              copy nul 2> empty_file.txt
              

              【讨论】:

              • 为什么有效?什么是操作理论?
              【解决方案26】:

              在 Windows 上

              我试过这样做

              echo off > fff1.txt
              

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

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

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

              【讨论】:

              • 如果需要,不要忘记在创建文件后回显。
              • 我不知道为什么会这样,但我猜你应该在输入上述命令后进行“回显”。
              • Re “我没有找到除此之外的任何可以创建空文件的命令。”:所以你没有看前面 30 多个答案中的任何一个在这里?
              【解决方案27】:

              这是另一种方式:

              rem/ > file.ext
              

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

              【讨论】:

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

              我刚刚在 Windows 中尝试过:

              copy con file.txt
              

              然后按 Enter 键。然后按 Ctrl + ZEnter

              它对我有用。

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

              vi file.txt
              

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

              【讨论】:

              • 问题说“命令需要从脚本运行,所以不能使用击键。”.
              【解决方案29】:

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

              echo . > myfile.txt
              

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

              copy /y nul myfile.txt
              

              【讨论】:

                【解决方案30】:

                这会改变命令行窗口的标题,但也会创建一个空文件。

                title > file.txt
                

                【讨论】:

                • 悬念!它将命令行窗口标题更改为什么?
                • 空/无标题?
                猜你喜欢
                • 2015-07-12
                • 1970-01-01
                • 2019-05-13
                • 1970-01-01
                • 2019-12-17
                • 1970-01-01
                • 1970-01-01
                • 2013-09-16
                • 1970-01-01
                相关资源
                最近更新 更多