在没有新行的情况下复制到 PowerShell 中的剪贴板
Copying to the clipboard in PowerShell without a new line
有没有办法在 PowerShell 中从 out-clipboard
或 clip
中删除新行?
我正在使用此代码将当前路径复制到剪贴板:
function cl() {
(Get-Location).ToString() | clip
}
而且每次我使用它时,都会在复制的文本中添加一个新行。这令人沮丧,因为我无法将其粘贴到 CLI 中,就像我粘贴从其他地方复制的文本一样。因为换行使得CLI上的命令自动执行。
示例:我在 C:\Users
并键入 cl
,然后我使用 Alt + SPACE + E + P 传递文本,命令执行完毕,不能再打字了。但是当没有换行的情况下传递文本时,什么都不会执行,我可以继续输入。
Add-Type -Assembly PresentationCore
$clipText = (get-location).ToString() | Out-String -Stream
[Windows.Clipboard]::SetText($clipText)
正如@PetSerAl 在评论中指出的那样,当字符串对象通过管道发送时,PowerShell 添加了换行符。 Get-Location
的字符串化输出没有尾随换行符:
PS C:\> <b>$v = (Get-Location).ToString()</b>
PS C:\> <b>"-$v-"</b>
-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()
使用Set-Clipboard
函数:
(get-location).ToString()|Set-Clipboard
以空字节结尾的字符串会解决这个问题。对不包含 Set-Clipboard
的 powershell 核心有用
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
有没有办法在 PowerShell 中从 out-clipboard
或 clip
中删除新行?
我正在使用此代码将当前路径复制到剪贴板:
function cl() {
(Get-Location).ToString() | clip
}
而且每次我使用它时,都会在复制的文本中添加一个新行。这令人沮丧,因为我无法将其粘贴到 CLI 中,就像我粘贴从其他地方复制的文本一样。因为换行使得CLI上的命令自动执行。
示例:我在 C:\Users
并键入 cl
,然后我使用 Alt + SPACE + E + P 传递文本,命令执行完毕,不能再打字了。但是当没有换行的情况下传递文本时,什么都不会执行,我可以继续输入。
Add-Type -Assembly PresentationCore
$clipText = (get-location).ToString() | Out-String -Stream
[Windows.Clipboard]::SetText($clipText)
正如@PetSerAl 在评论中指出的那样,当字符串对象通过管道发送时,PowerShell 添加了换行符。 Get-Location
的字符串化输出没有尾随换行符:
PS C:\> <b>$v = (Get-Location).ToString()</b>
PS C:\> <b>"-$v-"</b>
-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()
使用Set-Clipboard
函数:
(get-location).ToString()|Set-Clipboard
以空字节结尾的字符串会解决这个问题。对不包含 Set-Clipboard
的 powershell 核心有用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