【问题标题】:How can you get the clipboard contents with a Windows command?如何使用 Windows 命令获取剪贴板内容?
【发布时间】:2013-07-23 02:10:59
【问题描述】:

例如,我可以像这样将文件复制到剪贴板:

clip < file.txt

(现在file.txt 的内容在剪贴板中。)

我该如何做相反的事情:

???? > file.txt

这样剪贴板的内容会在file.txt?

【问题讨论】:

  • 这里没有第三方软件的解决方案:stackoverflow.com/a/15747067/1683264
  • 我知道我迟到了,但我认为我的回答(见下文)可能最接近问题的意图。

标签: windows cmd clipboard copy-paste


【解决方案1】:

您可以使用 paste.exe 软件来粘贴您所描述的文本。

http://www.c3scripts.com/tutorials/msdos/paste.html

有了它,你可以做到:

paste | command

将windows剪贴板的内容粘贴到指定命令提示符的输入中

paste > filename

将剪贴板内容粘贴到指定文件。

【讨论】:

  • 那么windows没有自带的东西吗?
  • 从发布的内容来看,dos似乎没有任何此类功能,剪贴板只能在高级编程语言的帮助下访问。
  • 我在问题中提到的 clip.exe 随 Windows 一起提供。
  • 不要期待奇迹,复制到剪贴板的图像或电子表格在文本文件中看起来不会那么好。这当然是没有标准命令的原因,事故太多了。
  • @HansPassant 哦,我很生气。这不是一个理由!有多少小猫因这些事故而死亡?
【解决方案2】:

有第三方剪辑命令可以双向工作。

这是一个:

    CLIP - Copy the specified text file to the clip board
    Copyright (c) 1998,99 by Dave Navarro, Jr. (dave@basicguru.com)

【讨论】:

  • 如何得到这个?
  • 这是一个已有 20 年历史的程序,它不会通过管道输出到 STDOUT。它仅从文件或 STDIN 复制并仅粘贴到文件中。
【解决方案3】:

我在这个页面上有一对实用程序(在 Clip 命令是 Windows 的一部分之前):

http://www.clipboardextender.com/general-clipboard-use/command-window-output-to-clipboard-in-vista

其中有两个实用程序,Clip2DOS 和 DOS2Clip。你想要 Clip2DOS:

Clip2DOS 版权所有 2006 Thornsoft Development 将剪贴板文本(1024 字节)转储到标准输出。
用法:Clip2Dos.exe > out.txt 结果:文本在文件中。 限制:1024 字节。 许可证:免费,就像免费啤酒一样! http://www.thornsoft.com/dist/techsupport/dos2clip.zip

包含 DELPHI 源!

嘿,这里是(Clip2DOS.dpr):

{Clip2DOS - copyright 2005 Thornsoft Development, Inc.  All rights reserved.}
program Clip2Dos;

{$APPTYPE CONSOLE}

uses
  Clipbrd,
  ExceptionLog,
  SysUtils;

var
   p : Array[0..1024] of Char;
begin
  try
    WriteLn('Clip2DOS Copyright 2006 Thornsoft Development');
    Clipboard.GetTextBuf(p,1024);
    WriteLn(p);
  except
    //Handle error condition
    on E: Exception do
            begin
              beep;
              Writeln(SysUtils.format('Clip2DOS - Error: %s',[E.Message]));
              ExitCode := 1;    //Set ExitCode <> 0 to flag error condition (by convention)
            end;
  end
end.

【讨论】:

    【解决方案4】:

    这个肮脏的把戏满足了我的需要,而且它随 Windows 一起提供!

    notepad.exe file.txt
    

    Ctrl + V, Ctrl + S, Alt + F, X

    【讨论】:

    • 非常有趣。不幸的是,对于非常大的剪贴板,这非常慢。
    • 嗯,但是如果我在此过程中不小心重新启动了系统会怎样? Alt + F4 非常危险。
    • @MateenUlhaq 如果任务栏有焦点,它可能会拉起关机菜单,但 Alt + F4 不会在没有额外点击或按键的情况下重新启动。
    • @MateenUlhaq Alt + F + X 更安全。
    【解决方案5】:

    这是 Dave Navarro 的 CLIP 程序,@foxidrive 的答案中提到了这一点。这里有一篇文章提到:copying-from-clipboard-to-xywrite

    此页面上有下载链接以及许多其他资源:http://www.lexitec.fi/xywrite/utility.html

    这里是下载的直接链接: "DOWNLOAD Clip.exe Dave Navarro, Jr. 在剪贴板中复制和复制。"

    【讨论】:

      【解决方案6】:

      我知道我真的迟到了,但你可以写:

      type file.txt | clip
      

      所以剪贴板的内容就是file.txt的内容

      【讨论】:

      • 这是写入剪贴板(甚至有一个等效的解决方案在问题本身中)。问题是如何获取剪贴板的内容(到文件)所以这甚至没有尝试回答这个问题。
      【解决方案7】:

      如果您接受使用PowerShell(而不是cmd),您可以完全按照您的要求使用Get-Clipboard

      Get-Clipboard > myfile.txt
      

      这种方法的优点是您无需安装任何东西。

      注意:您可以使用具有更多选项的Set-Clipboard 代替clip

      注意2:如果你真的想从cmd运行它,你可以调用powershell,如下例powershell -command "Get-Clipboard | sort | Set-Clipboard"

      【讨论】:

        【解决方案8】:

        澄清@Kpym 的答案:

        powershell -command "Get-Clipboard" > file.txt
        

        这直接回答了问题,无需使用 3rd 方工具。

        【讨论】:

        • 由于DOSKEY macros 和批处理脚本不能在管道中可靠地工作,似乎是您在适当的管道中处理剪贴板文本的唯一途径(就像 Unix,通过像 sort 这样的程序,从标准输入读取的morefindstr)是使用 PowerShell。如果你是一个温和的灵魂,喜欢 CMD.EXE 并且不在 PowerShell 中茁壮成长,你可以将整个管道 as 构建为 PowerShell 命令,如下所示:powershell -command "get-clipboard | findstr STRING | sort | more"
        • PowerShell 的 outside 重定向似乎破坏了编码(如果文件不是纯 ASCII)。在 PowerShell 中重定向 within 会有所帮助。尽管您必须在 Windows PowerShell 中指定编码,因为它默认为 UTF-16,这是人们几乎不想要的。在 PowerShell Core 中,就像 pwsh -command "Get-Clipboard &gt; file.txt" 一样简单,因为 PowerShell Core 默认为 UTF-8。
        【解决方案9】:

        使用doskey宏定义功能,您可以:

        doskey unclip=(powershell -command "Get-Clipboard") $*
        

        然后(例如)

        dir/b | clip
        unclip | sort/r
        

        【讨论】:

        • 很适合在命令行上使用,但 Doskey 宏在批处理文件中不起作用。 (没有批评,只是要注意)
        【解决方案10】:

        我不确定当时是否不支持此命令,但它确实有效

        clip > file.txt
        

        【讨论】:

        • windows 自带的clip 命令肯定不行。 (检查文件的内容 - 这是一条错误消息)
        【解决方案11】:

        获取剪贴板内容

        来自win cmd:

        powershell get-clipboard
        

        或(通过来自 HTML 解析器的临时文件)在 cmd 上:

        echo x = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") > temp.vbs
        echo WScript.Echo x >> temp.vbs
        cscript //nologo temp.vbs
        

        输出可能被重定向到文件。

        【讨论】:

          【解决方案12】:

          粘贴板是另一种选择。它也可以从 WSL 工作。首先,通过 choco 安装:

          choco install pasteboard
          

          那么命令很简单

          pbpaste.exe > file.txt
          

          这适用于 cmd 和 wsl bash。

          【讨论】:

            【解决方案13】:

            vbs 或许可以:

            Option Explicit
             
            ' Gets clipboard's contents as pure text and saves it or open it
            
            Dim filePath : filePath = "clipboard.txt"
            
            ' Use the HTML parser to have access to the clipboard and get text content
            Dim text : text = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")
            
            ' to open
            If Not IsNull(text) then
            Dim WshShell, somestring, txFldr2Open
            Set WshShell = WScript.CreateObject("WScript.Shell")
            
            txFldr2Open = "C:\Users"
            txFldr2Open = text
            
            somestring = "EXPLORER.exe /e," & txFldr2Open ', /select
            WshShell.run somestring
            Set WshShell = Nothing
            else 
            msgbox("Empty")
            
            end if
            
            
            
            ' Create the file and write on it
            msgbox(text)
            Dim fileObj : Set fileObj = CreateObject("Scripting.FileSystemObject").CreateTextFile(filePath)
            fileObj.Write(text)
            fileObj.Close
            

            【讨论】:

              【解决方案14】:

              您可以使用cbecho,这是我用纯 C 语言编写的程序。它将任何剪贴板文本发送到标准输出,您可以从那里将其通过管道传输到其他程序。

              【讨论】:

              • 请不要仅发布链接答案,您至少需要在答案中使用链接的关键部分。链接可以更改,使答案无用。
              【解决方案15】:

              嗯,从一百万年前,我们做了这样的事情:

              type con &gt; filename.txt

              ... 然后在等待提示符中执行粘贴操作(Ctrl-v,单击鼠标中键,或从菜单中选择编辑->粘贴)。这将捕获标准输入缓冲区(控制台设备,名为“con”),当收到文件结尾时,它将内容写入文件。因此,在粘贴之后,键入“Ctrl-z”以生成 EOF,然后键入命令终止,并且粘贴缓冲区(剪贴板)的内容被捕获在“filename.txt”中。

              【讨论】:

              • 我明白了。这类似于 *nix 上的cat &gt; filename.txt(然后粘贴和 Ctrl+D)。已经太久了,不记得这是否适用于我原来的用例,但知道它很有用。谢谢。
              猜你喜欢
              • 2015-11-30
              • 2023-02-08
              • 2013-05-16
              • 2010-11-22
              • 2011-09-18
              • 2013-06-15
              • 1970-01-01
              • 2012-03-26
              相关资源
              最近更新 更多