想知道为什么复制文件时会丢失剪贴板数据。选择一串文本并将其复制到剪贴板后,如果我选择一个文件并将其复制到 Windows 资源管理器中,然后再将文本粘贴到某处,则复制的文本数据会以某种方式丢失。
例如,我选择并复制以下文本字符串:
黑狗晚上跑
然后我进入 Windows 资源管理器选择并复制文件:
无标题.bat
之后,我粘贴该文件的副本untitled.bat
。如果我随后导航到可以粘贴文本的位置(例如记事本),则最初复制的文本字符串将不再位于剪贴板中以进行粘贴。
Windows 为什么要这样做?
运行Windows10专业版
剪贴板一次只能保留一项,可能采用一种或多种格式。例如,浏览器可能会放置图像位图、图像 URL、网站、替代文本...当您从某个网站复制图像时,目标应用程序会在粘贴时选择适当的格式,但它仍然只是一项。几乎所有操作系统都是一样的。如果您复制其他内容(无论其类型如何),则旧内容将丢失。想象一下复制一个文件,把代表该文件的对象放入其中,同时将文件路径作为文本放入剪贴板,那么旧的文本如何保留呢?
然而,在 Windows 上有一个内置的剪贴板历史记录功能,因此只需启用它并按Win+即可V。它甚至可以在 Windows PC 之间同步
您不会“丢失”剪贴板数据。它只是被新数据覆盖,并且默认情况下您无法访问旧数据,因为它作为单个记录存储在 RAM 中。不过,还有更好的方法来跟踪它,稍后会列出其中一种。
这是因为系统无法完全知道您到底要粘贴什么,并且只有一个Ctrl+V快捷方式。如果需要,可以对应用程序进行编码以检查特定格式并正确处理所有格式。因此,由用户决定最后一项是什么。如果当前格式受支持,则由应用程序通知用户,不幸的是,如果发生不支持的格式粘贴,许多应用程序什么也不做。
该网站上的问题/答案文本框就是一个很好的例子。您可以将文本(
CF_TEXT
/CF_UNICODETEXT
输入)作为最后一项,它将被粘贴为文本。您还可以将图像作为最后一项(CF_DIB
类型),它会上传图像。或者,您可以从 Windows 资源管理器复制文件(CF_HDROP
键入)并粘贴,但这不会执行任何操作,因为这里不欢迎常规的非图像文件上传。相比之下,如果您在 Gmail 中撰写邮件,则所有这些类型都将受到支持。
CF_TEXT
仍会粘贴文本。CF_DIB
仍会粘贴内联图像。不过CF_HDROP
这次会处理好一些,以附件形式发送。您可以在此处阅读有关 Windows 中可用的类型/格式的更多信息。
您可以使用Ditto等高级剪贴板管理器来绕过此限制:
Options
->中Copy Buffers
,您为每个缓冲区(单独的列表)设置 3 个键绑定:复制、粘贴和剪切。假设您将其定义为传统的快捷键 + Shift。Shift然后您可以使用+ Ctrl+将所有文件复制到新定义的缓冲区,C并且您的主剪贴板仍将包含文本。这对于某些工作流程很有帮助。Linux 上有CopyQ。
为什么系统本身不实现多个缓冲区?进入“基于意见”领域的原因有多种,但事实是,如果使用舒适的话,它们会在额外的键盘快捷键/按钮方面引入混乱,而不需要此功能的用户的系统不会混乱棒极了。
Windows 剪贴板可以保存多种格式,当您复制某些内容时,源应用程序通常会将数据以多种格式放入剪贴板中。然后,目标应用程序可以选择两个应用程序都支持的“最佳”格式。将新项目复制到剪贴板通常会替换现有内容。
当您在 Windows 资源管理器中复制和粘贴内容时,会使用 Windows 剪贴板,但它并不是实际将整个文件移动/复制到剪贴板,而是仅存储文件的详细信息,以及用户是否选择“剪切”(移动)文件)或“复制”(复制文件)操作。然后,当用户将文件粘贴到目标中时,将执行实际的移动或复制。
过去,如果您在另一个应用程序中复制某些内容并将其粘贴到 Windows 资源管理器中,它会创建一个包含剪贴板内容的“废料”文件,但此功能很少使用,并且在 Windows Vista 中被删除。
这使得 Windows 资源管理器处于稍微奇怪的位置,它使用系统剪贴板,但无法与大多数其他应用程序互操作。