Können Sie nircmd verwenden, um den Inhalt der Zwischenablage in einer Batchdateivariable zu speichern?

Können Sie nircmd verwenden, um den Inhalt der Zwischenablage in einer Batchdateivariable zu speichern?

In einem Batch-Skript möchte ich den Text aus der Zwischenablage in einer Variable speichern. Nach einiger Recherche scheint dies ohne Tools von Drittanbietern nicht möglich zu sein. Nun nircmd, ich habe eines und einer seiner Befehle lautet:

"consolewrite [text] Sendet den angegebenen Text an die Standardausgabe (stdout)."

Ich hoffte, ich könnte mein Ziel mit der folgenden, einfachen Zeile erreichen:

    FOR /F "tokens=* USEBACKQ" %%F IN (`nircmd.exe consolewrite ~$clipboard$`) DO (SET varCB=%%F)

Theoretisch würde das bedeuten, dass nircmdder Inhalt der Zwischenablage in STDOUT geschrieben wird und der for-Befehl diese Ausgabe dann in speichert varCB. Aber das funktioniert nicht.

UPDATE: Tatsächlich funktioniert diese Zeile jetzt. Sie platziert den Text aus der Zwischenablage in varCB. Bei meinen ersten Tests muss mir ein Fehler unterlaufen sein.

UPDATE 2: Es wurde darauf hingewiesen, dass der obige Code nur die letzte Zeile in der Variable varCB speichert, wenn sich mehrere Textzeilen in der Zwischenablage befinden. Wenn Ihr Text in der Zwischenablage mehrere Zeilen umfasst, können Sie mit dem folgenden Code jede Zeile in einer eigenen Variable speichern:

    @echo off
    SETLOCAL ENABLEDELAYEDEXPANSION
    SET count=1
    FOR /F "tokens=* USEBACKQ" %%F IN (`nircmd.exe consolewrite ~$clipboard$`) DO (
      SET varCB!count!=%%F
      SET /a count=!count!+1
    )
    ECHO %varCB1%
    ECHO %varCB2%
    ECHO %varCB3%
    [...]
    ENDLOCAL

(angepasst von einem Code, den ich vor langer Zeit kopiert habe. Leider habe ich vergessen, woher.)

UPDATE 3: Es wurde auch darauf hingewiesen, dass meine Verwendung des Begriffs „Tools von Drittanbietern“ oben ungenau ist. Ich meinte lediglich, dass andere Anwendungen oder Skriptsprachen erforderlich wären, um das Ziel zu erreichen (wie PowerShell oder NirCMD). Natürlich sind einige dieser Tools möglicherweise bereits in Win10 enthalten und sind daher technisch gesehen keine „Tools von Drittanbietern“. Das tut mir leid!

Antwort1

In einem Batch-Skript möchte ich den Text aus der Zwischenablage in einer Variable speichern. Nach einiger Recherche scheint dies ohne Tools von Drittanbietern nicht möglich zu sein.

Es tut mir leid, aber das stimmt nicht:


  • PowerShell: Zwischenablage einfügen:
Get-Clipboard|Foreach{$_} 

// or using aliases, shorter: gcb|?{$_}
  • VBScript-Zwischenablage einfügen:
WScript.Echo CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")
  • Bat + Powershell
powershell -nOp -c  "Get-Clipboard|Foreach{$_}"

  • Sie benötigen keine Tools von Drittanbietern, um den Inhalt Ihrer Zwischenablage abzurufen, der aus einer oder mehreren Zeilen besteht:
@echo off 

for /f usebackq^tokens^=1*delims^=: %%i in (`(
powershell -nOp -c "gcb|%%{$_}"^)^|findstr /nr .
   `)do set "_vbCB_%%~i=%%~j" && set "_upto=%%~i"
    
for /l %%L in (1 1 %_upto%)do call echo\_vbCB_%%L: %%_vbCB_%%~L%%

  • Inhalt meines ClipBoards:


Lorem ipsum dolor sit amet. Sed iure harum et esse error et velit earum. 
Et dolor perspiciatis id veniam dolor cum galisum asperiores. 
Ab doloremque omnis sed harum explicabo ut galisum 
veniam ut voluptas facere.

Sed amet corporis eos magnam voluptatem sed dolor alias. Et facere esse 
ea voluptates odit aut alias pariatur. Aut molestiae quam et saepe 
corrupti id quia facilis. Est labore temporibus qui eaque labore ab 
ipsa voluptatibus vel dolores galisum non aliquid earum id beatae 
rerum.

Eos nobis consequatur est accusantium sapiente et illum velit et 
libero quasi est consequatur fuga ea sunt molestias. Id enim vitae 
sed dolor similique qui voluptatem autem. Aut sunt perferendis in 
aperiam aspernatur nam assumenda aliquam hic laboriosam galisum.

  • Ausgaben:
_vbCB_1:
_vbCB_2:
_vbCB_3: Lorem ipsum dolor sit amet. Sed iure harum et esse error et velit earum.
_vbCB_4: Et dolor perspiciatis id veniam dolor cum galisum asperiores.
_vbCB_5: Ab doloremque omnis sed harum explicabo ut galisum
_vbCB_6: veniam ut voluptas facere.
_vbCB_7:
_vbCB_8: Sed amet corporis eos magnam voluptatem sed dolor alias. Et facere esse
_vbCB_9: ea voluptates odit aut alias pariatur. Aut molestiae quam et saepe
_vbCB_10: corrupti id quia facilis. Est labore temporibus qui eaque labore ab
_vbCB_11: ipsa voluptatibus vel dolores galisum non aliquid earum id beatae
_vbCB_12: rerum.
_vbCB_13:
_vbCB_14: Eos nobis consequatur est accusantium sapiente et illum velit et
_vbCB_15: libero quasi est consequatur fuga ea sunt molestias. Id enim vitae
_vbCB_16: sed dolor similique qui voluptatem autem. Aut sunt perferendis in
_vbCB_17: aperiam aspernatur nam assumenda aliquam hic laboriosam galisum.

Bem.:Die ersten beiden Zeilen sind absichtlich leer, um anzuzeigen, dass Sie den gesamten Inhalt der Zwischenablage erhalten, einschließlich Leerzeilen, unabhängig davon, wo sich diese befinden.

Antwort2

Befindet sich nircmd.exe (a) auf Ihrem PATH ODER (b) im selben Ordner, in dem sich Ihr Befehlsfenster befindet, UND (c) wird es nicht von einer eventuell vorhandenen Antiviren-App blockiert? Ich habe gerade diesen Text (aus Ihrer Frage, in meinem Webbrowser) in die Zwischenablage kopiert:

nircmd.exe consolewrite ~$clipboard$

Dann habe ich ein Befehlsfenster geöffnet, mit der rechten Maustaste auf die Eingabeaufforderung geklickt (um den Befehlstext einzufügen) und die Eingabetaste gedrückt, und nircmd hat es wie erwartet zurückgegeben.

C:\Users\Mike>nircmd.exe consolewrite ~$clipboard$
nircmd.exe consolewrite ~$clipboard$
C:\Users\Mike>

Ich habe nircmd.exe in einem Ordner namens c:\utils\, der sich auf meinem PATH befindet.

Auch das hat funktioniert (Sie wissen, dass Sie in der Eingabeaufforderung einzelne Prozentzeichen für FOR-Metavariablen verwenden und diese in einem Batch-Skript verdoppeln?)

C:\Users\Mike>for /f "delims=" %A in ('nircmd.exe consolewrite ~$clipboard$') do @echo %A
nircmd.exe consolewrite ~$clipboard$

C:\Users\Mike>.

Schließlich habe ich diesen Stapel erstellt und als nirtest.bat gespeichert (die echo.Zeile rührt daher, dass nircmd keinen Zeilenvorschub/Wagenrücklauf einfügt).

@echo off
echo 1
nircmd.exe consolewrite ~$clipboard$
echo.
echo 2
for /f "delims=" %%A in ('nircmd.exe consolewrite ~$clipboard$') do (
    echo Clipboard: %%A
)

Ergebnis:

C:\Users\Mike>nirtest.bat
1
some text in the clipboard
2
Clipboard: some text in the clipboard

Antwort3

Die folgende Zeile verwendet nircmd.exe, um den Text in der Zwischenablage in der Variable varCB zu speichern.

    FOR /F "tokens=* USEBACKQ" %%F IN (`nircmd.exe consolewrite ~$clipboard$`) DO (SET varCB=%%F)

(Dies setzt eine einzelne Textzeile in der Zwischenablage voraus. Wenn Ihr Zwischenablagetext mehrere Zeilen umfasst, sehen Sie sich den alternativen Code im UPDATE 2 des OP an.

Antwort4

SET "_NirCmd=D:\_NirSoft\nircmd-x64\nircmd.exe"
%_NirCmd% clipboard writefile F:\_Clip.txt
SET /P _VVV=<F:\_Clip.txt & DEL F:\_Clip.txt

verwandte Informationen