2015-01-01 20 views
10

Gibt es eine Möglichkeit, eine neue Zeile aus out-clipboard oder clip in PowerShell zu entfernen?Kopieren in die Zwischenablage in PowerShell ohne eine neue Zeile

ich diesen Code bin mit Strompfad kopieren in die Zwischenablage kopieren:

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

Und jedes Mal, wenn ich diese, eine neue Zeile auf den kopierten Text hinzugefügt. Es ist frustrierend, denn dann kann ich es nicht in die CLI einfügen, wie ich es mit Text tun würde, der von woanders kopiert wird. Weil eine neue Zeile einen Befehl auf der CLI automatisch ausführt.

Beispiel: Ich in C:\Users bin und geben Sie cl, und dann verwende ich Alt + SPACE + E + P den Text zu übergeben, wird der Befehl ausgeführt, und ich kann nicht geben nicht mehr. Aber wenn Text ohne eine neue Zeile übergeben wird, wird nichts ausgeführt, und ich kann weiter tippen.

+0

Hey IGRACH, würden Sie die gewählte Antwort auf BdN3504 betrachten die Veränderung? IMHO ist es eindeutig besser. – Jansky

Antwort

3

Wie von @PetSerAl in den Kommentaren wird die Newline von Powershell hinzugefügt, wenn das String-Objekt wird durch die Pipeline geschickt. Die Zeichenfolge Ausgabe von Get-Location hat nicht, dass folgende Zeilen:

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

Sie könnten versuchen, so etwas wie 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

Vielen Dank, mein Herr, Sie sind ein echter Weihnachtsmann, beste Geschenk eine hatte dieses Jahr xD – IGRACH

+1

Es ist nicht 'clip' Fehler, es ist PowerShell fügt Zeilenumbrüche beim Senden von Objekten an native Befehle per Pipeline. – PetSerAl

+0

Nun, das ist nur dumm xD – IGRACH

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

Verwenden Sie die Set-Clipboard Funktion:

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

Großartig, funktioniert einfach! – Kasaku

+0

Brilliant, viel besser als die anderen Antworten. – Jansky

0

die Zeichenfolge mit einem Ending Nullbyte wird sich darum kümmern. Nützlich für die Powershell-Kern, der nicht enthält Zwischenablage Set-

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 
Verwandte Themen