为什么复制文件后剪贴板数据会丢失?

Kal*_*Kid 21 windows clipboard windows-explorer copy

想知道为什么复制文件时会丢失剪贴板数据。选择一串文本并将其复制到剪贴板后,如果我选择一个文件并将其复制到 Windows 资源管理器中,然后再将文本粘贴到某处,则复制的文本数据会以某种方式丢失。

例如,我选择并复制以下文本字符串:

黑狗晚上跑

然后我进入 Windows 资源管理器选择并复制文件:

无标题.bat

之后,我粘贴该文件的副本untitled.bat。如果我随后导航到可以粘贴文本的位置(例如记事本),则最初复制的文本字符串将不再位于剪贴板中以进行粘贴。

Windows 为什么要这样做?

运行Windows10专业版

phu*_*clv 41

剪贴板一次只能保留一项,可能采用一种或多种格式。例如,浏览器可能会放置图像位图、图像 URL、网站、替代文本...当您从某个网站复制图像时,目标应用程序会在粘贴时选择适当的格式,但它仍然只是一项。您可以使用此轻松检查剪贴板中的当前格式

如果它可以存储多个项目,那么操作系统如何知道当您按Ctrl+时要粘贴什么V?几乎所有操作系统都是一样的。如果您复制其他内容(无论其类型如何),则旧内容将丢失。想象一下复制一个文件,把代表该文件的对象放入其中,同时将文件路径作为文本放入剪贴板,那么旧的文本如何保留呢?如果支持多项目剪贴板,那么按Ctrl+时的明智行为V是粘贴顶部项目,但如果在复制文件时将某些文本放入剪贴板,那么您以前的文本已经出现在列表中并且无法被粘贴。粘贴的


然而,在 Windows 上有一个内置的剪贴板历史记录功能,因此只需启用它并按Win+即可V。它甚至可以在 Windows PC 之间同步

剪贴板设置

剪贴板历史记录

  • @RohitGupta 公司机器?这种事情可以在组策略中设置 (4认同)
  • 当您在文件资源管理器中选择“剪切”或“复制”时,文件的名称将放在剪贴板上,并带有一个标志,说明该文件是否被标记为“剪切”或“复制”。当您粘贴到目标文件夹时,将检查剪贴板,然后移动或复制文件。 (2认同)
  • @ChrisH,我不在公司环境中。它在我的家用电脑上。也许是因为我一直在使用剪贴板工具,该工具可以提供历史记录以及其他功能。 (2认同)

Des*_*666 24

您不会“丢失”剪贴板数据。它只是被新数据覆盖,并且默认情况下您无法访问旧数据,因为它作为单个记录存储在 RAM 中。不过,还有更好的方法来跟踪它,稍后会列出其中一种。

这是因为系统无法完全知道您到底要粘贴什么,并且只有一个Ctrl+V快捷方式。如果需要,可以对应用程序进行编码以检查特定格式并正确处理所有格式。因此,由用户决定最后一项是什么。如果当前格式受支持,则由应用程序通知用户,不幸的是,如果发生不支持的格式粘贴,许多应用程序什么也不做。

该网站上的问题/答案文本框就是一个很好的例子。您可以将文本(CF_TEXT/CF_UNICODETEXT输入)作为最后一项,它将被粘贴为文本。您还可以将图像作为最后一项(CF_DIB类型),它会上传图像。或者,您可以从 Windows 资源管理器复制文件(CF_HDROP键入)并粘贴,但这不会执行任何操作,因为这里不欢迎常规的非图像文件上传。

相比之下,如果您在 Gmail 中撰写邮件,则所有这些类型都将受到支持。CF_TEXT仍会粘贴文本。CF_DIB仍会粘贴内联图像。不过CF_HDROP这次会处理好一些,以附件形式发送。

您可以在此处阅读有关 Windows 中可用的类型/格式的更多信息。


您可以使用Ditto等高级剪贴板管理器来绕过此限制:

  • 默认情况下,访问项目历史记录要容易得多 - 通过您可以显示和操作的列表(例如使用转到下一个项目的快捷方式) - 如果需要,您可以进一步配置它
  • 您还可以配置 3 个额外的特殊复制缓冲区以用于不同类型的存储。在Options->中Copy Buffers,您为每个缓冲区(单独的列表)设置 3 个键绑定:复制、粘贴和剪切。假设您将其定义为传统的快捷键 + ShiftShift然后您可以使用+ Ctrl+将所有文件复制到新定义的缓冲区C,并且您的主剪贴板仍将包含文本。这对于某些工作流程很有帮助。

Linux 上有CopyQ

为什么系统本身不实现多个缓冲区?进入“基于意见”领域的原因有多种,但事实是,如果它们的使用应该舒适的话,它们会在额外的键盘快捷键/按钮方面引入混乱,并且不需要此功能的用户的系统不会混乱棒极了。

  • 这就是我一直在寻找的答案。那里有很多有用且相关的信息。谢谢你! (2认同)

plu*_*ash 6

Windows 剪贴板可以保存多种格式,当您复制某些内容时,源应用程序通常会将数据以多种格式放入剪贴板中。然后,目标应用程序可以选择两个应用程序都支持的“最佳”格式。将新项目复制到剪贴板通常会替换现有内容。

当您在 Windows 资源管理器中复制和粘贴内容时,会使用 Windows 剪贴板,但它并不是实际将整个文件移动/复制到剪贴板,而是仅存储文件的详细信息,以及用户是否选择“剪切”(移动)文件)或“复制”(复制文件)操作。然后,当用户将文件粘贴到目标中时,将执行实际的移动或复制。

过去,如果您在另一个应用程序中复制某些内容并将其粘贴到 Windows 资源管理器中,它会创建一个包含剪贴板内容的“废料”文件,但此功能很少使用,并且在 Windows Vista 中被删除。

这使得 Windows 资源管理器处于稍微奇怪的位置,它使用系统剪贴板,但无法与大多数其他应用程序互操作。

  • “当您在Windows资源管理器中复制和粘贴内容时,会使用Windows剪贴板[...]”我怀疑这是OP不理解的关键部分,并且在其他答案中没有明确说明。 Exploreṙ 也使用保存文本的同一个剪贴板来保存文件,这似乎很奇怪。 (2认同)

Tho*_*ler 6

其他人已经指出了发生这种情况的技术原因。如果您想亲自观察,请尝试NirSoft InsideClipboard。它向您显示 Windows 剪贴板中的内容(而不是 Windows 剪贴板历史记录)。它只包含您复制的一项内容,但该内容可能以不同的格式存在,例如 HTML 的纯文本。

您的文本可能如下所示:

复制文本

之后

  • Ctrl+C或者
  • 文件上下文菜单/复制
  • 色带复印

在 Windows 资源管理器中:

文件已复制

此特定问题的解决方案:

  • 用鼠标选择文件并按住,点击Ctrl进行复制,移动鼠标直到看到复制图标,由 指示[+],然后释放鼠标按钮。
  • 使用FastCopy等 3rd 方工具复制文件。

  • 我记得 Windows 曾经提供过剪贴板查看器(当然功能不如这个)。 (2认同)