<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Windows · Domal</title>
    <link>https://domal.cc/tags/windows/</link>
    <description>Domal</description>
    <generator>Hugo -- gohugo.io</generator>
    <atom:link href="https://domal.cc/tags/windows/" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Windows 11 无法删除 “NUL” 文件</title>
      <link>https://domal.cc/posts/%E7%B3%BB%E7%BB%9F%E6%96%87%E4%BB%B6/</link>
      <pubDate>Wed, 12 Aug 2026 09:55:03 &#43;0800</pubDate>
      <author>豆沫</author>
      <guid>https://domal.cc/posts/%E7%B3%BB%E7%BB%9F%E6%96%87%E4%BB%B6/</guid>
      <description>&amp;lt;h1 id=&amp;#34;windows-11-无法删除-nul文件-尝试粉碎文件等其他操作皆失败&amp;#34;&amp;gt;Windows 11 无法删除 “nul”文件？ 尝试粉碎文件等其他操作皆失败？&amp;lt;/h1&amp;gt;&amp;#xA;&amp;lt;p&amp;gt;&amp;lt;img src=&amp;#34;https://p6-flow-imagex-sign.byteimg.com/labis/image/20e121daf9135f39ec4c3806ebefab60~tplv-be4g95zd3a-448x448.jpeg?lk3s=8e244e95&amp;amp;amp;rcl=202608120959187219B888A040393321CE&amp;amp;amp;rrcfp=2033b573&amp;amp;amp;x-expires=1787104758&amp;amp;amp;x-signature=B%2BAeKgFVxLm4FWtp%2Fg4N94GxUhI%3D&amp;#34; alt=&amp;#34;nul&amp;#34;&amp;gt;&amp;lt;/p&amp;gt;&amp;#xA;&amp;lt;h2 id=&amp;#34;问题现象&amp;#34;&amp;gt;问题现象&amp;lt;/h2&amp;gt;&amp;#xA;&amp;lt;p&amp;gt;整理文件时遇到诡异问题：文件夹内存在名为 &amp;lt;code&amp;gt;nul&amp;lt;/code&amp;gt; 的文件，大小354字节，使用常规删除操作时，系统弹窗提示：&amp;lt;/p&amp;gt;&amp;#xA;&amp;lt;blockquote&amp;gt;&amp;#xA;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;MS-DOS 功能无效&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;#xA;&amp;lt;/blockquote&amp;gt;&amp;#xA;&amp;lt;h2 id=&amp;#34;根本原因穿越40年的兼容性债务&amp;#34;&amp;gt;根本原因：穿越40年的兼容性债务&amp;lt;/h2&amp;gt;&amp;#xA;&amp;lt;p&amp;gt;该问题根源追溯至1981年发布的 MS-DOS 1.0，核心是&amp;lt;strong&amp;gt;DOS保留设备名&amp;lt;/strong&amp;gt;带来的系统兼容限制。&amp;lt;/p&amp;gt;&amp;#xA;&amp;lt;h3 id=&amp;#34;保留设备名称reserved-device-names&amp;#34;&amp;gt;保留设备名称（Reserved Device Names）&amp;lt;/h3&amp;gt;&amp;#xA;&amp;lt;p&amp;gt;DOS系统为硬件设备预留专属文件名，这类名称具备特殊系统含义，无需完整路径即可被系统识别：&amp;lt;/p&amp;gt;&amp;#xA;&amp;lt;table&amp;gt;&amp;#xA;&amp;#x9;&amp;lt;thead&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;tr&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;th&amp;gt;名称&amp;lt;/th&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;th&amp;gt;对应设备含义&amp;lt;/th&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;/tr&amp;gt;&amp;#xA;&amp;#x9;&amp;lt;/thead&amp;gt;&amp;#xA;&amp;#x9;&amp;lt;tbody&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;tr&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CON&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;td&amp;gt;控制台（键盘&#43;显示器）&amp;lt;/td&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;/tr&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;tr&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NUL&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;td&amp;gt;空设备（数据黑洞，写入内容直接丢弃）&amp;lt;/td&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;/tr&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;tr&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;PRN&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;td&amp;gt;默认打印机&amp;lt;/td&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;/tr&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;tr&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;AUX&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;td&amp;gt;辅助串口设备&amp;lt;/td&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;/tr&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;tr&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COM1&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;COM9&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;td&amp;gt;串行通讯端口&amp;lt;/td&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;/tr&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;tr&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LPT1&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;LPT9&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;td&amp;gt;并行打印端口&amp;lt;/td&amp;gt;&amp;#xA;&amp;#x9;&amp;#x9;&amp;#x9;&amp;lt;/tr&amp;gt;&amp;#xA;&amp;#x9;&amp;lt;/tbody&amp;gt;&amp;#xA;&amp;lt;/table&amp;gt;&amp;#xA;&amp;lt;p&amp;gt;DOS时代典型使用示例：&amp;#xA;&amp;lt;div class=&amp;#34;code-copy&amp;#34; data-code-copy&amp;gt;&amp;#xD;&amp;#xA;  &amp;lt;div class=&amp;#34;code-copy__toolbar&amp;#34;&amp;gt;&amp;#xD;&amp;#xA;    &amp;lt;span class=&amp;#34;code-copy__lang&amp;#34;&amp;gt;cmd&amp;lt;/span&amp;gt;&amp;#xD;&amp;#xA;    &amp;lt;button type=&amp;#34;button&amp;#34; class=&amp;#34;code-copy__copy&amp;#34; data-copy&amp;gt;复制代码&amp;lt;/button&amp;gt;&amp;#xD;&amp;#xA;  &amp;lt;/div&amp;gt;&amp;#xD;&amp;#xA;  &amp;lt;pre class=&amp;#34;code-copy__pre&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cmd code-copy__source&amp;#34;&amp;gt;COPY CON file.txt  :: 从控制台输入内容保存到文件&amp;#xD;&amp;#xA;TYPE file.txt &amp;amp;gt; PRN :: 将文件内容直接发送打印机&amp;#xD;&amp;#xA;ECHO Hello &amp;amp;gt; NUL    :: 静默执行，不输出任何内容&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;#xD;&amp;#xA;&amp;lt;/div&amp;gt;&amp;#xD;&amp;#xA;&amp;lt;script&amp;gt;&amp;#xD;&amp;#xA;(function () {&amp;#xD;&amp;#xA;  function loadPrism(cb) {&amp;#xD;&amp;#xA;    if (!document.getElementById(&amp;#39;prism-domal-copy-style&amp;#39;)) {&amp;#xD;&amp;#xA;      var s = document.createElement(&amp;#39;style&amp;#39;);&amp;#xD;&amp;#xA;      s.id = &amp;#39;prism-domal-copy-style&amp;#39;;&amp;#xD;&amp;#xA;      s.textContent = [&amp;#xD;&amp;#xA;        &amp;#39;.code-copy .token.comment,.code-copy .token.prolog,.code-copy .token.doctype,.code-copy .token.cdata{color:var(--color-neutral-5);font-style:italic}&amp;#39;,&amp;#xD;&amp;#xA;        &amp;#39;.code-copy .token.punctuation{color:var(--color-neutral-6)}&amp;#39;,&amp;#xD;&amp;#xA;        &amp;#39;.code-copy .token.property,.code-copy .token.tag,.code-copy .token.boolean,.code-copy .token.number,.code-copy .token.constant,.code-copy .token.symbol,.code-copy .token.deleted{color:var(--color-accent)}&amp;#39;,&amp;#xD;&amp;#xA;        &amp;#39;.code-copy .token.selector,.code-copy .token.attr-name,.code-copy .token.string,.code-copy .token.char,.code-copy .token.builtin,.code-copy .token.inserted{color:var(--color-success)}&amp;#39;,&amp;#xD;&amp;#xA;        &amp;#39;.code-copy .token.operator,.code-copy .token.entity,.code-copy .token.url,.code-copy .language-css .token.string,.code-copy .style .token.string{color:var(--color-warning)}&amp;#39;,&amp;#xD;&amp;#xA;        &amp;#39;.code-copy .token.atrule,.code-copy .token.attr-value,.code-copy .token.keyword{color:var(--color-info)}&amp;#39;,&amp;#xD;&amp;#xA;        &amp;#39;.code-copy .token.function,.code-copy .token.class-name{color:var(--color-accent)}&amp;#39;,&amp;#xD;&amp;#xA;        &amp;#39;.code-copy .token.regex,.code-copy .token.important,.code-copy .token.variable{color:var(--color-warning)}&amp;#39;,&amp;#xD;&amp;#xA;        &amp;#39;.code-copy code[class*=&amp;#34;language-&amp;#34;],.code-copy pre[class*=&amp;#34;language-&amp;#34;]{color:var(--color-neutral-9);text-shadow:none;font-family:var(--font-mono)}&amp;#39;,&amp;#xD;&amp;#xA;        &amp;#39;.code-copy .token.dom-tag{color:var(--color-accent)}&amp;#39;&amp;#xD;&amp;#xA;      ].join(&amp;#39;\n&amp;#39;);&amp;#xD;&amp;#xA;      document.head.appendChild(s);&amp;#xD;&amp;#xA;    }&amp;#xD;&amp;#xA;    if (!document.getElementById(&amp;#39;prism-core&amp;#39;)) {&amp;#xD;&amp;#xA;      var s = document.createElement(&amp;#39;script&amp;#39;);&amp;#xD;&amp;#xA;      s.id = &amp;#39;prism-core&amp;#39;;&amp;#xD;&amp;#xA;      s.src = &amp;#39;https://cdn.jsdelivr.net/npm/prismjs@1.29.0/prism.min.js&amp;#39;;&amp;#xD;&amp;#xA;      s.async = true;&amp;#xD;&amp;#xA;      s.onload = cb;&amp;#xD;&amp;#xA;      document.head.appendChild(s);&amp;#xD;&amp;#xA;    } else {&amp;#xD;&amp;#xA;      if (window.Prism &amp;amp;&amp;amp; cb) cb();&amp;#xD;&amp;#xA;    }&amp;#xD;&amp;#xA;  }&amp;#xD;&amp;#xA;  loadPrism(function () {&amp;#xD;&amp;#xA;    if (window.Prism) Prism.highlightAll();&amp;#xD;&amp;#xA;  });&amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA;  document.querySelectorAll(&amp;#39;.code-copy[data-code-copy]&amp;#39;).forEach(function (block) {&amp;#xD;&amp;#xA;    var sourceEl = block.querySelector(&amp;#39;.code-copy__source&amp;#39;);&amp;#xD;&amp;#xA;    var copyBtn = block.querySelector(&amp;#39;[data-copy]&amp;#39;);&amp;#xD;&amp;#xA;    if (!sourceEl || !copyBtn) return;&amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA;    copyBtn.addEventListener(&amp;#39;click&amp;#39;, function () {&amp;#xD;&amp;#xA;      var sourceText = sourceEl.textContent;&amp;#xD;&amp;#xA;      var done = function () {&amp;#xD;&amp;#xA;        var orig = copyBtn.textContent;&amp;#xD;&amp;#xA;        copyBtn.textContent = &amp;#39;已复制 &amp;#39;;&amp;#xD;&amp;#xA;        setTimeout(function () { copyBtn.textContent = orig; }, 1800);&amp;#xD;&amp;#xA;      };&amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA;      if (navigator.clipboard &amp;amp;&amp;amp; window.isSecureContext) {&amp;#xD;&amp;#xA;        navigator.clipboard.writeText(sourceText.trim()).then(done).catch(function () {&amp;#xD;&amp;#xA;          fallbackCopy(sourceEl, done);&amp;#xD;&amp;#xA;        });&amp;#xD;&amp;#xA;      } else {&amp;#xD;&amp;#xA;        fallbackCopy(sourceEl, done);&amp;#xD;&amp;#xA;      }&amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA;      function fallbackCopy(el, cb) {&amp;#xD;&amp;#xA;        var range = document.createRange();&amp;#xD;&amp;#xA;        range.selectNodeContents(el);&amp;#xD;&amp;#xA;        var sel = window.getSelection();&amp;#xD;&amp;#xA;        sel.removeAllRanges();&amp;#xD;&amp;#xA;        sel.addRange(range);&amp;#xD;&amp;#xA;        try { document.execCommand(&amp;#39;copy&amp;#39;); cb(); } catch (e) {}&amp;#xD;&amp;#xA;        sel.removeAllRanges();&amp;#xD;&amp;#xA;      }&amp;#xD;&amp;#xA;    });&amp;#xD;&amp;#xA;  });&amp;#xD;&amp;#xA;})();&amp;#xD;&amp;#xA;&amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;</description>
    </item>
    
  </channel>
</rss>