- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一些不寻常的、相对复杂/大型的 PowerShell 脚本,它通过 Write-Host 输出彩色文本。我想将整个文本输出复制到 Windows 剪贴板而不丢失制表符(使用 Windows Control-C,剪贴板复制)或替代。如果我在 PowerShell.exe 控制台窗口中运行脚本后突出显示所有文本,然后按 control-C(复制到 Windows 剪贴板)制表符将转换为空格。
如果我尝试使用下面的 Set-Clipboard cmdlet 来传输我脚本的整个输出,我的脚本中有太多组件(主要是 Write-Host 行)与进一步的 PS 管道处理不兼容;因此,下面的 Set-Clipboard 被完全忽略(仅将输出显示到本地主机控制台)。
PS:我也尝试过 Start-Transcript\Stop-Transcript.. 但是,这也不会捕获标签。它将制表符转换为空格。
我希望有人有一个聪明、快速的方法来剪贴板捕获我从 cmdlet 获得的文本,这些 cmdlet 需要 write-host 也捕获 `t 制表符。
invoke-myscript -Devicename "WindowsPC" | Set-Clipboard
function Set-Clipboard {
param(
## The input to send to the clipboard
[Parameter(ValueFromPipeline = $true)]
[object[]] $InputObject
)
begin
{
Set-StrictMode -Version Latest
$objectsToProcess = @()
}
process
{
## Collect everything sent to the script either through
## pipeline input, or direct input.
$objectsToProcess += $inputObject
}
end
{
## Launch a new instance of PowerShell in STA mode.
## This lets us interact with the Windows clipboard.
$objectsToProcess | PowerShell -NoProfile -STA -Command {
Add-Type -Assembly PresentationCore
## Convert the input objects to a string representation
$clipText = ($input | Out-String -Stream) -join "`r`n"
## And finally set the clipboard text
[Windows.Clipboard]::SetText($clipText)
}
}
最佳答案
我认为您会找到的答案是使用 Write-Host 通常会让您走上一条您不希望的道路。 Jeffrey Snover在他的博客中讨论了这个。更改脚本以将 Write-Host 更改为 Write-Output 甚至可能使用颜色来决定是否应将其中一些更改为 Write-Verbose 和/或 Write-Warning 可能是值得的。
如果您这样做,那么您还有其他选择可供您使用,例如使用 -OutVariable
来精确捕获输出以进行进一步处理(自动化)。
以下示例展示了此类更改如何使您受益。
function print-with-tab {
[cmdletbinding()]
Param()
Write-Host "HostFoo`t`t`tHostBar"
Write-Output "OutFoo`t`t`tOutBar"
Write-Warning "You have been warned."
}
print-with-tab -OutVariable outvar -WarningVariable warnvar
Write-Output "Out -->"
$outvar
# proof there's tabs in here
$outvar -replace "`t", "-"
Write-Output "Warn -->"
$warnvar
输出
HostFoo HostBar
OutFoo OutBar
WARNING: You have been warned.
Out -->
OutFoo OutBar
OutFoo---OutBar
Warn -->
You have been warned.
最后的想法是,如果您知道您没有任何包含 4 个空格的字符串(如果这是您的制表符变成的内容),那么获取您的输出,替换所有出现的 4 个空格,回到制表符,然后添加到剪贴板。 Hacky,但根据我之前关于使用 Write-Host 和进一步自动化所采取的路径的观点......这可能对你有用。
在那种情况下,我认为你可以使用类似的东西:
$objectsToProcess += $inputObject -replace " ", "`t"
关于windows - 使用 Windows Control-C 剪贴板复制时如何保留制表符 `n` n?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34421971/
当尝试复制到剪贴板时,有什么区别 Clipboard.SetData(DataFormats.Text, ""); 和 Clipboard.SetText(""); 最佳答案 SetText 只是 S
我正在尝试将一个对象复制到 Windows 剪贴板上,然后再次关闭。我的代码是这样的: 复制到剪贴板: Clipboard.Clear(); DataObject newObject = new Da
如何在非静态线程中获取剪贴板文本?我有一个解决方案,但我正在尝试获得最干净/最短的方法。正常调用时结果为空字符串。 最佳答案 我会添加一个辅助方法,它可以在 MTA 主线程中将 Action 作为 S
我正在研究Applescript,将上次复制的内容粘贴到任何当前字段中。它将与VoiceOver一起使用,并且关键代码方式(我所知道的唯一方式)并非始终有效。 tell application
我在这里看到: http://www.pgrs.net/2008/1/11/command-line-clipboard-access Linux 和 osx 中有一种方法可以从命令行复制到剪贴板。所
我正在尝试使用已在浏览器中运行的 Clipboard API,但 PhpStorm 不知道它。 怎样才能让 PhpStorm 识别它?我已在项目设置中将 JavaScript 语言版本设置为 ECMA
Wayland 中有剪贴板 API 之类的东西吗?或者我应该在哪里以编程方式将内容粘贴到剪贴板? 我在 Wayland 上运行 Fedora 24。 如果我觉得有一个剪贴板完全没问题,那么有代码示例(
我最近看到一个针对 ClearCase 的绝妙 hack,其中版本号作为提交的一部分被添加到 Windows 剪贴板。黑客看起来像这样: @rem = ' PERL for Windows NT -
为什么 System.Windows.Clipboard(PresentationCore.dll) 对System.Windows.Thickness (PresentationFramework.
我想用来自 NUnit 测试的文本填充 Forms.Clipboard。 我遇到的第一个问题是剪贴板必须在STA模式下使用。我找到了 the solution (NUnit 2.5.x+) 在方法上设
当我想在我的应用程序中共享基本纯文本时,将其复制到剪贴板的选项不会显示在选择器列表中。我的代码有问题吗?还是我的设备设置有误? String code = getXMLCode(); Intent s
我在LibGDX开发游戏,游戏中有登录界面和注册界面。 HTML 版本的游戏有剪贴板的沙盒环境,意味着: 任何从游戏中复制的东西,都不能粘贴到游戏外&从外部复制的任何内容都不能粘贴到游戏的文本字段中
我有一个奇怪的问题,我相信我可能只需要一些权利来声明使其工作。 我有一些用户可以复制文本的 TextView ,并且可以将其粘贴到应用程序内的另一个文本字段中。但是当用户退出(或暂停)应用程序时,用户
我有一个小程序正在监听图像的剪贴板( Hook )。如果有存储或通过ctrl+c等复制的图像,我的程序会自动将图像粘贴到打开的word文档中。 代码: if (Clipboard.ContainsIm
我正在使用在 Linux Mint 上运行的终端仿真器(准确地说是 MATE),它在 Windows 托管的虚拟机中运行。我通过 ssh 连接到 CentOS Linux 上的 bash shell。
我发现自己在运行脚本并将这些运行的输出复制粘贴到电子邮件或其他一些文档中。有没有办法让复制到剪贴板的步骤成为脚本本身的一部分?我的大部分脚本都是 Perl 或 bat 文件,我在 Windows 上工
如何使用 .NET 框架访问剪贴板内容? 最佳答案 检查 Clipboard类及其 SetText\GetText 方法。 另请参阅本教程: Clipboard Copy and Paste with
我有一些代码要复制和粘贴: void WinClipboard::copy( const std::string& input ) { LPWSTR lptstrCopy;
我想获取当前存储在 Windows 剪贴板中的数据并将其保存在一个变量中,然后将数据放回剪贴板。 现在我正在使用这段代码: object l_oClipBrdData = Clipboard.GetD
引用topic这解释了如何将数据复制到 android 剪贴板,是否可以将视频/音频文件复制到剪贴板。 我假设视频/音频文件以二进制值存储并再次绑定(bind)以将它们作为视频/音频播放。 需要您的建
我是一名优秀的程序员,十分优秀!