2015-01-01 15 views
10

C'è un modo per rimuovere una nuova riga da out-clipboard o clip in PowerShell?Copia negli appunti in PowerShell senza una nuova riga

Sto usando questo codice da copiare percorso corrente nella clipboard:

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

E ogni volta che uso questo, si aggiunge una nuova linea per il testo copiato. È frustrante, perché quindi non posso incollarlo nella CLI, come farei con il testo che viene copiato da altrove. Perché una nuova riga fa eseguire automaticamente un comando sulla CLI.

Esempio: Sono in C:\Users e inserite cl, e poi uso Alt + SPACE + E + P per passare il testo, il comando viene eseguito, e non posso digitare più. Ma quando il testo viene passato senza una nuova riga non viene eseguito nulla e posso continuare a digitare.

+0

Hey IGRACH, potresti considerare di cambiare la risposta selezionata a BdN3504? IMHO è chiaramente migliore. – Jansky

risposta

3

Come sottolineato dagli @PetSerAl nei commenti, la nuova riga viene aggiunto da PowerShell quando l'oggetto stringa viene inviata attraverso la pipeline. L'uscita stringata del Get-Location non ha quella di fine riga:

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

Si potrebbe provare qualcosa di simile 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() 
+0

Grazie signore sei un vero Babbo Natale, il miglior regalo dell'anno quest'anno xD – IGRACH

+1

Non è un errore 'clip', è PowerShell che aggiunge newline quando si inviano oggetti ai comandi nativi tramite pipeline. – PetSerAl

+0

Beh, questo è semplicemente stupido xD – IGRACH

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

utilizzare la funzione Set-Clipboard:

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

Ottimo, funziona! – Kasaku

+0

Brillante, molto più ordinato delle altre risposte. – Jansky

0

Terminare la stringa con un null byte si prenderà cura di esso. Utile per il nucleo di PowerShell, che non contiene 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.append($text) 
     } 
    } 

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

"asdf" | set-clipboard 
Problemi correlati