无需新行即可在PowerShell中复制到剪贴板

时间:2015-01-01 17:03:14

标签: powershell powershell-v4.0

有没有办法在PowerShell中从out-clipboardclip删除新行?

我使用此代码将当前路径复制到剪贴板:

function cl() {
    (Get-Location).ToString() | clip
}

每次我使用它时,都会在复制的文本中添加一个新行。这令人沮丧,因为我无法将其粘贴到CLI中,就像我从其他地方复制的文本一样。因为新行会在CLI上自动执行命令。

示例:我在C:\Users并输入cl,然后我使用 Alt + SPACE + E + P 传递文本,执行命令,我不能再输入了。但是当没有新行传递文本时,没有执行任何操作,我可以继续输入。

4 个答案:

答案 0 :(得分:12)

使用Set-Clipboard功能:

(get-location).ToString()|Set-Clipboard

答案 1 :(得分:7)

Add-Type -Assembly PresentationCore
$clipText = (get-location).ToString() | Out-String -Stream
[Windows.Clipboard]::SetText($clipText)

答案 2 :(得分:4)

正如@PetSerAl在评论中所指出的,当通过管道发送字符串对象时,PowerShell会添加换行符。 Get-Location的字符串化输出没有该尾随换行符:

PS C:\> $v = (Get-Location).ToString()
PS C:\> "-$v-"
-C:\-

您可以尝试使用this

Add-Type -AssemblyName System.Windows.Forms
$tb = New-Object Windows.Forms.TextBox
$tb.MultiLine = $true
$tb.Text = (Get-Location).ToString()
$tb.SelectAll()
$tb.Copy()

答案 3 :(得分:2)

使用空字节结束字符串将处理它。对PowerShell核心很有用,它不包含Set-Clipboard

function set-clipboard{
    param(
       [parameter(position=0,mandatory=$true,ValueFromPipeline=$true)]$Text
    )
    begin{
        $data = [system.text.stringbuilder]::new()
    }

    process{
        if ($text){
            [void]$data.appendline($text)
        }
    }

    end{
        if ($data){
            $data.tostring().trimend([environment]::newline) + [convert]::tochar(0) | clip.exe
        }
    }
}


"asdf" | set-clipboard