【问题标题】:How to create empty text file from a batch file?如何从批处理文件创建空文本文件?
【发布时间】:2010-09-17 15:13:53
【问题描述】:

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

【问题讨论】:

  • 也在stackoverflow.com/questions/1702762,“如何在命令行创建一个空文件?”。
  • 你不会混淆 DOS 和 cmd.exe 吧?
  • 自述:Set-Content "your_file.txt" .gitignore -Encoding utf8 这是区分大小写的并强制 utf8 编码! (我也发布了这个作为答案)。

标签: batch-file cmd dos


【解决方案1】:
复制 NUL EmptyFile.txt

DOS 在每个目录中都有一些特殊文件(实际上是设备),NUL 相当于 UNIX 的 /dev/null:它是一个神奇的文件,它总是空的,并且会丢弃您写入的任何内容。这是其他一些人的list; CON 偶尔也有用。

为了避免有任何输出,你可以使用

copy /y NUL EmptyFile.txt >NUL

/y 阻止copy 在输出到NUL 时询问您看不到的问题。

【讨论】:

  • +1 - 问题确实声明了一个 empty 文件,因此接受的答案是错误的。
  • DannySmurf 的解决方案实际上确实创建了一个空文件——换行符进入标准输出,没有任何内容进入标准错误(直接进入新文件)。但无论如何感谢您的 +1
  • type nul > EmptyFile.txt 是最短的解决方案。你的答案仍然比接受的解决方案更好,因为你的文件真的是空的。 +1
  • 警告:是的,问题是关于如何创建一个空文件,但通常你想“确保文件存在”。使用copy /Y NUL 命令时,它可能会删除现有内容。如果你习惯了 Unix 的touch 命令,这可能根本不是你所期望的。)在这方面使用type NUL >> emptyfile.txt 更安全。
  • 我在CON 上找不到任何信息,除了这个答案中链接的信息。有人可以分享一些简单的阅读吗?
【解决方案2】:
echo. 2>EmptyFile.txt

【讨论】:

  • 这与标准输出的换行符相呼应,但是......我的回答没有。
  • 有时是相关的;在我想到只复制 NUL(或键入 NUL>file)以获取 0 字节文件之前,我曾经有接触过。 :-)
  • 要合并 ephemient 的答案和这个,你可以这样做:"echo.>NUL 2>EmptyFile.txt" 以达到相同的结果而不输出换行符
  • 为什么. 在echo.中
  • @Reegan 如果您使用echo 2 而不使用.,控制台将显示“ECHO 已关闭”。使用 echo. 2 通过只显示换行符有效地使控制台输出静音。
【解决方案3】:
type NUL > EmptyFile.txt

在阅读了前两篇文章后,我想到了这两者的结合。好像干净了一点。无需担心重定向“复制的 1 个文件”。向NUL 发送消息,就像之前的帖子一样,并且在通常会出现在批处理文件中的ECHO OutputLineFromLoop >> Emptyfile.txt 旁边看起来不错。

【讨论】:

  • +1 这是第一个想到的自然问题,而不是 stderr 等的发明。
  • 你是对的。此方法避免了复制命令上的 /y 标志。
  • 简短易懂。这里的其他一些解决方案不会创建零字节的新文件!
  • 这应该是公认的答案。尽可能干净和简单。
【解决方案4】:

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

制作 0 字节文件是一种非常清晰、向后兼容的方式:

type nul >EmptyFile.txt

想法来自:anonymous、Danny Backett,可能还有其他人,我的灵感来自JdeBP's work

另一种方式的 0 字节文件,它是向后兼容的:

REM. >EmptyFile.txt

想法来自:Johannes

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

echo. 2>EmptyFile.txt

想法来自:TheSmurf

0字节文件系统方式probably自Windows 2000起可用:

fsutil file createnew EmptyFile.txt 0

想法来自:Emm

一个 0 字节的文件覆盖只读文件

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

想法来自:copyitright

一个换行符(2个字节:0x0D 0x0A in hex notation,或者写成\r\n):

echo.>AlmostEmptyFile.txt

注意:没有在echo、. 和> 之间有空格。

想法来自:How can you echo a newline in batch files?


edit似乎任何无效命令重定向到一个文件都会创建一个空文件。呵呵,特色! 兼容性:未知

TheInvisibleFeature <nul >EmptyFile.txt

0 字节文件:无效命令/随机名称(兼容性:未知):

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

via: great source for random by Hung Huynh

edit 2 Andriy M points out 可能是通过无效命令实现此目的最有趣/最令人发指的方式

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

*>EmptyFile.txt

想法来自:Andriy M

一个 0 字节的文件 4th-coming way:

break > file.txt

想法来自:foxidrive 感谢comment of Double Gras!

【讨论】:

  • 实际上是type nul ...,而不是type &lt;nul ...。
  • @AndriyM 谢谢你是对的我做了编辑!没有注意到,因为有趣的是它与错误的一起工作。这可能意味着重定向到文件名的任何无效命令都会创建一个空文件!刚刚尝试使用NonExistentCommand &lt;nul &gt;EmptyFile.txt 并且成功了
  • 因为依赖硬编码的命令名称并期望它是“无效的”是不安全的,所以我添加了一个随机命令名称选项
  • 还有一个:break &gt; file.txt,道具foxidrive
  • 如果你需要“必须存在但不应该被截断”,大多数命令都可以与&gt;&gt;一起使用(就像Unix touch一样)
【解决方案5】:

快速移动。 > 空文件

【讨论】:

  • 我被困在 Windows CE 上,这是创建和清空文件的唯一答案!其他方法要么添加一个空行,要么根本不起作用......
  • 这个方案唯一的问题是,如果当前目录下有一个叫REM的文件,你输入REM.,cmd会响应"'rem.'未被识别为内部或外部命令、可运行程序或批处理文件。”
  • @DodgyCodeException,使用rem/ 而不是rem. 解决了这个问题...
  • @aschipfl 谢谢,这很有趣。同样有趣的是,2010 年的这个答案如何使 cmets 彼此相隔数年。缓慢的对话!
【解决方案6】:

如果要写入的文件可能已经存在并且是只读的,请使用以下代码:

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

如果不存在文件,只需执行以下操作:

CD .>filename.ext

(根据 DodgyCodeException 的注释更新/更改代码)

为了抑制可能出现的任何错误:

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

【讨论】:

  • 这个解决方案唯一的问题是,如果当前目录下有一个名为CD(无扩展名)的文件,你输入CD.,cmd会响应“'CD.'未被识别为内部或外部命令、可运行程序或批处理文件。”如果您改为输入CD .(点前有一个空格),它将起作用。
【解决方案7】:
fsutil file createnew file.cmd 0

【讨论】:

  • FSUTIL 实用程序要求您具有管理权限。
  • fsutil 不是 MS-DOS 中的标准实用程序。
【解决方案8】:

还有一个要添加到书中的内容 - 简短而甜美。

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

【讨论】:

  • 我想我们会跳过引号
  • @NamGVU 如果您选择使用长文件名元素(如空格或 & 等),引号将用于目标文件名。它们不是文件内容的一部分。
  • 是的,我同意 ^^ 允许按照讨论更新您的。
  • @NamGVU 引号可以在有或没有长文件名的情况下保留。我猜如果它是用短文件名从命令行输入的,那么你不会想要不必要的输入。
  • 我建议从这个答案中删除第二行。 IMO 这是迄今为止该问题的最佳答案,但第二行并没有真正增加价值,除非尝试使用它的人不知道命令行空白处理的基础知识。
【解决方案9】:

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

TYPE File1.txt>File2.txt

File1.txt 为空。

【讨论】:

  • 你也可以type NUL&gt;File2.txt
  • 顺便说一句,如何获取 File1.txt?
【解决方案10】:

您也可以使用SET 创建一个空的byte 文件,如下所示

set x=x > EmptyFile.txt

或者,如果您不想创建额外的变量,请重新分配现有变量,例如

set PROMPT=%PROMPT% > EmptyFile.txt

或者像这样:

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

【讨论】:

    【解决方案11】:

    有无数种方法。

    什么都不输出的命令:

    break
    cls
    color
    goto
    pushd
    popd
    prompt
    title
    

    奇怪的命令:

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

    过时的print 命令会产生一个空白文件:

    print /d:EMPTY_TEXT_FILE nul
    

    【讨论】:

      【解决方案12】:

      最简单的方法是:

      echo. &gt; Filename.txt

      【讨论】:

      • 这将创建一个文件,其中包含一个空格字符、一个回车字符和一个换行符——不是一个空文件。
      • 值得看看我的答案(如下),因为它改变了编码。
      【解决方案13】:

      重要提示:

      如果不设置编码,很多软件都会崩溃。 git 是一个非常流行的例子。

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

      【讨论】:

      • 编码与创建 empty 文件有何关系?空字节文件不需要任何编码,用 BOM(0 字节)标记它很棘手
      • @jeb 因为人们填充空文件,并且当填充的文件用作设置文件时,当它们不是 UTF8 时会产生错误。事实上,我会说人们几乎总是填写文件并且不会将它们留空,而且我不会使用任何其他方法来创建我后来打算更改的空白文件,因为我几乎总是想确定我的文件是UTF8。例如,github上的.git教程要求用户创建一个稍后填充的空白文件,另一种方法是创建一个具有奇怪Windows编码的文件。
      • @Wolfpack'08,文件编码没有存储在特殊属性或其他一些神奇的秘密区域,它只是通过它包含的数据来反映;如果没有数据,就不可能有编码……
      • @aschipfl 那么空白文件必须包含一些数据。如果您创建一个空白文件并显式标记 utf8,则该文件在稍后填充后工作;另一方面,如果您创建一个空白文件并表面上允许使用默认编码 (ASCII),那么当您稍后填充该文件时,它将破坏任何需要 UT8 编码的程序。我有这方面的第一手经验,任何人都可以测试它。不管你如何怀疑,这显然是正确的,并且可以容忍经验测试:我认为负面反馈是完全没有根据的,并且会损害这些重要信息的可访问性。证明它。
      • 空白文件就是空白文件,里面没有数据;否则,它不会是空白的(空的,0 字节),不是吗?您似乎在使用版本控制工具 (git),它为每个文件存储一些元数据,显然包括其编码。但是空白文件本身肯定没有任何编码设置,无论是在数据区(0字节显然没有信息),还是在文件系统的文件表(FAT,NTFS,或任何你可能使用的)中......跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      • 2013-08-31
      • 2013-05-11
      • 2020-06-15
      • 2013-09-25
      相关资源
      最近更新 更多