gpt4 book ai didi

windows - 在 Windows 批处理文件中访问剪贴板

转载 作者:可可西里 更新时间:2023-11-01 12:11:39 25 4
gpt4 key购买 nike

知道如何使用批处理文件访问 Windows 剪贴板吗?

最佳答案

设置剪贴板的内容,如Chris Thornton、klaatu和bunches of others已经说过,使用 %windir%\system32\clip.exe


更新 2:

对于快速的一行,你可以这样做:

powershell -sta "add-type -as System.Windows.Forms; [windows.forms.clipboard]::GetText()"

如果需要,使用 for/F 循环捕获和解析。这不会像下面的 JScript 解决方案那样执行得那么快,但它确实具有简单的优点。


更新的解决方案:

Thanks Jonathan用于指向神秘的 htmlfile COM 对象检索剪贴板的功能。可以调用批处理 + JScript 混合来检索剪贴板的内容。事实上,它只需要一行 JScript 和一行 cscript 即可触发它,并且比之前提供的 PowerShell/.NET 解决方案快得多。

@if (@CodeSection == @Batch) @then

@echo off
setlocal

set "getclip=cscript /nologo /e:JScript "%~f0""

rem // If you want to process the contents of the clipboard line-by-line, use
rem // something like this to preserve blank lines:
for /f "delims=" %%I in ('%getclip% ^| findstr /n "^"') do (
setlocal enabledelayedexpansion
set "line=%%I" & set "line=!line:*:=!"
echo(!line!
endlocal
)

rem // If all you need is to output the clipboard text to the console without
rem // any processing, then remove the "for /f" loop above and uncomment the
rem // following line:
:: %getclip%

goto :EOF

@end // begin JScript hybrid chimera
WSH.Echo(WSH.CreateObject('htmlfile').parentWindow.clipboardData.getData('text'));

旧的解决方案:

通过使用 .NET,无需任何第 3 方应用程序即可从 Windows 控制台检索剪贴板文本。如果您安装了 powershell,您可以通过创建一个假想的文本框并将其粘贴到其中来检索剪贴板内容。 ( Source )

Add-Type -AssemblyName System.Windows.Forms
$tb = New-Object System.Windows.Forms.TextBox
$tb.Multiline = $true
$tb.Paste()
$tb.Text

如果您没有powershell,您仍然可以编译一个简单的.NET 应用程序来将剪贴板文本转储到控制台。这是一个 C# 示例。 ( Inspiration )

using System;
using System.Threading;
using System.Windows.Forms;
class dummy {
[STAThread]
public static void Main() {
if (Clipboard.ContainsText()) Console.Write(Clipboard.GetText());
}
}

这是一个结合了这两种方法的批处理脚本。如果 powershell 存在于 %PATH% 中,请使用它。否则,找到 C# 编译器/链接器并构建一个临时的 .NET 应用程序。正如您在批处理脚本注释中看到的那样,您可以使用 for/f 循环捕获剪贴板内容,或者直接将它们转储到控制台。

:: clipboard.bat
:: retrieves contents of clipboard

@echo off
setlocal enabledelayedexpansion

:: Does powershell.exe exist within %PATH%?
for %%I in (powershell.exe) do if "%%~$PATH:I" neq "" (
set getclip=powershell "Add-Type -AssemblyName System.Windows.Forms;$tb=New-Object System.Windows.Forms.TextBox;$tb.Multiline=$true;$tb.Paste();$tb.Text"
) else (
rem :: If not, compose and link C# application to retrieve clipboard text
set getclip=%temp%\getclip.exe
>"%temp%\c.cs" echo using System;using System.Threading;using System.Windows.Forms;class dummy{[STAThread]
>>"%temp%\c.cs" echo public static void Main^(^){if^(Clipboard.ContainsText^(^)^) Console.Write^(Clipboard.GetText^(^)^);}}
for /f "delims=" %%I in ('dir /b /s "%windir%\microsoft.net\*csc.exe"') do (
if not exist "!getclip!" "%%I" /nologo /out:"!getclip!" "%temp%\c.cs" 2>NUL
)
del "%temp%\c.cs"
if not exist "!getclip!" (
echo Error: Please install .NET 2.0 or newer, or install PowerShell.
goto :EOF
)
)

:: If you want to process the contents of the clipboard line-by-line, use
:: something like this to preserve blank lines:
for /f "delims=" %%I in ('%getclip% ^| findstr /n "^"') do (
set "line=%%I" & set "line=!line:*:=!"
echo(!line!
)

:: If all you need is to output the clipboard text to the console without
:: any processing, then remove the above "for /f" loop and uncomment the
:: following line:

:: %getclip%

:: Clean up the mess
del "%temp%\getclip.exe" 2>NUL
goto :EOF

关于windows - 在 Windows 批处理文件中访问剪贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6832203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com