有没有办法在PowerShell中从out-clipboard
或clip
删除新行?
我使用此代码将当前路径复制到剪贴板:
function cl() {
(Get-Location).ToString() | clip
}
每次我使用它时,都会在复制的文本中添加一个新行。这令人沮丧,因为我无法将其粘贴到CLI中,就像我从其他地方复制的文本一样。因为新行会在CLI上自动执行命令。
示例:我在C:\Users
并输入cl
,然后我使用 Alt + SPACE + E + P 传递文本,执行命令,我不能再输入了。但是当没有新行传递文本时,没有执行任何操作,我可以继续输入。
答案 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