trouver - récupérer historique presse papier windows 10




Accéder au presse-papiers dans un fichier de commandes Windows (6)

Avec Vista ou supérieur, il est intégré. Il suffit de diriger la sortie vers le programme "clip". Voici un résumé (par moi): http://www.clipboardextender.com/general-clipboard-use/command-window-output-to-clipboard-in-vista L'article contient également un lien vers un utilitaire gratuit (écrit par Moi, je pense) appelé Dos2Clip, qui peut être utilisé sur XP.

EDIT: Je vois que j'ai la question en arrière, ma solution OUTPUTS au presse-papiers, ne le lit pas. Pardon!

Mise à jour: En plus de Dos2Clip, Clip2Dos (dans le même fichier zip) envoie le texte du presse-papiers à la sortie standard. Donc cela devrait fonctionner pour vous. Le source Pascal est inclus dans le zip.

Vous avez une idée de comment accéder au presse-papiers Windows à l'aide d'un fichier de commandes?


Ce n'est peut-être pas la réponse exacte, mais cela sera utile pour votre quête.

Message original: Visitez https://groups.google.com/d/msg/alt.msdos.batch/0n8icUar5AM/60uEZFn9IfAJ Interrogé par Roger Hunt Réponse de William Allen

Étapes beaucoup plus propres:

Étape 1) créer un fichier «bat» nommé Copy.bat dans le bureau en utilisant n'importe quel éditeur de texte et copier et passer sous le code et l'enregistrer.

  @ECHO OFF
  SET FN=%1
  IF ()==(%1) SET FN=H:\CLIP.TXT

  :: Open a blank new file
  REM New file>%FN%

  ECHO.set sh=WScript.CreateObject("WScript.Shell")>_TEMP.VBS
  ECHO.sh.Run("Notepad.exe %FN%")>>_TEMP.VBS
  ECHO.WScript.Sleep(200)>>_TEMP.VBS
  ECHO.sh.SendKeys("^+{end}^{v}%%{F4}{enter}{enter}")>>_TEMP.VBS
  cscript//nologo _TEMP.VBS

  ECHO. The clipboard contents are:
  TYPE %FN%

  :: Clean up
  DEL _TEMP.VBS
  SET FN=

Étape 2) créer un fichier texte vide (dans mon cas «CLIP.txt» dans le lecteur H) ou ailleurs, assurez-vous de mettre à jour le chemin du fichier Copy.bat sous «FN = H: \ CLIP.txt» avec votre fichier de destination chemin.

C'est tout.

Donc, fondamentalement, lorsque vous copiez du texte depuis n'importe où et exécutez le fichier Copy.bat à partir du bureau, il met à jour le fichier CLIP.txt avec le contenu du Presse-papiers et l' enregistre .

Les usages:

Je l'utilise pour transférer des données à partir de machines connectées à distance où le copier / coller est désactivé entre différentes connexions. où lecteur partagé (H :) est commun à toutes les connexions.


La commande de clip permet de diriger du texte vers le presse-papiers, mais elle ne peut pas être lue dans le presse-papiers. Il y a un moyen dans vbscript / javascript de lire / écrire le presse-papiers, mais il utilise l'automatisation et une instance invisible si Internet Explorer le fait, c'est assez gros.

Le meilleur outil que j'ai trouvé pour travailler le presse-papiers à partir d'un script est l'outil NirCmd gratuit de Nirsoft.

http://www.nirsoft.net/utils/nircmd.html

C'est comme un couteau suisse de commandes par lots tout en un petit fichier .exe. Pour les commandes de presse-papiers, vous diriez quelque chose comme

nircmd clipboard [Action] [Paramètre]

De plus, vous pouvez directement vous référer au contenu du presse-papiers dans n'importe laquelle de ses commandes en utilisant sa variable ~ $ clipboard $ comme argument. Nircmd a également des commandes pour exécuter d’autres programmes ou commandes, il est donc possible de l’utiliser pour transmettre le contenu du presse-papiers comme argument à d’autres commandes par lots.

Actions du Presse-papiers:

      set - set the specified text into the clipboard. 
 readfile - set the content of the specified text file into the clipboard. 
    clear - clear the clipboard. 
writefile - write the content of the clipboard to a file. (text only) 
  addfile - add the content of the clipboard to a file. (text only) 
saveimage - Save the current image in the clipboard into a file. 
copyimage - Copy the content of the specified image file to the clipboard. 
  saveclp - Save the current clipboard data into Windows .clp file. 
  loadclp - Load Windows .clp file into the clipboard. 

Notez que la plupart des programmes écrivent toujours une copie en texte brut dans le presse-papiers, même lorsqu'ils écrivent une copie RTF ou HTML spéciale dans le presse-papiers, mais que ceux-ci sont écrits en utilisant un autre format de presse-papiers. à moins que votre programme ne demande explicitement ce type de données dans le Presse-papiers.


La réduire (sur une nouvelle version de Windows):

set _getclip=powershell "Add-Type -Assembly PresentationCore;[Windows.Clipboard]::GetText()"
for /f "eol=; tokens=*" %I in ('%_getclip%') do set CLIPBOARD_TEXT=%I
  1. La première ligne déclare un powershell .
  2. La deuxième ligne s'exécute et capture la sortie de console de ce commandlet dans la variable d'environnement CLIPBOARD_TEXT (la méthode la plus proche de cmd.exe pour effectuer une capture de backtick ` style bash )

Mise à jour 2017-12-04:

Grâce à @Saintali pour avoir souligné que PowerShell 5.0 ajoute Get-Clipboard tant qu'applets de commande de niveau supérieur, cela fonctionne désormais comme une ligne unique:

for /f "eol=; tokens=*" %I in ('powershell Get-Clipboard') do set CLIPBOARD_TEXT=%I



Pour définir le contenu du presse-papiers, comme Chris Thornton, klaatu et d'autres groupes l'ont dit, utilisez %windir%\system32\clip.exe .

Mise à jour 2:

Pour un one-liner rapide, vous pourriez faire quelque chose comme ceci:

powershell -sta "add-type -as System.Windows.Forms; [windows.forms.clipboard]::GetText()"

Capturez et analysez avec une boucle for /F si nécessaire. Cela ne s'exécutera pas aussi rapidement que la solution JScript ci-dessous, mais elle présente l'avantage de la simplicité.

Solution mise à jour:

Merci Jonathan d' avoir souligné les capacités du mystérieux objet COM htmlfile pour récupérer le presse-papiers. Il est possible d'appeler un hybride batch + JScript pour récupérer le contenu du presse-papiers. En fait, il suffit d'une ligne de JScript et d'une ligne de cscript pour le déclencher, et cette solution est beaucoup plus rapide que la solution PowerShell / .NET proposée précédemment.

@if (@CodeSection == @Batch) @then

@echo off
setlocal

set "getclip=cscript /nologo /e:JScript "%~f0""

rem // If you want to process the contents of the clipboard line-by-line, use
rem // something like this to preserve blank lines:
for /f "delims=" %%I in ('%getclip% ^| findstr /n "^"') do (
    setlocal enabledelayedexpansion
    set "line=%%I" & set "line=!line:*:=!"
    echo(!line!
    endlocal
)

rem // If all you need is to output the clipboard text to the console without
rem // any processing, then remove the "for /f" loop above and uncomment the
rem // following line:
:: %getclip%

goto :EOF

@end // begin JScript hybrid chimera
WSH.Echo(WSH.CreateObject('htmlfile').parentWindow.clipboardData.getData('text'));

Ancienne solution:

Il est possible de récupérer le texte du presse-papiers depuis la console Windows sans aucune application tierce en utilisant .NET. Si vous avez installé powershell , vous pouvez récupérer le contenu du presse-papiers en créant une zone de texte imaginaire et en la collant. ( Source )

Add-Type -AssemblyName System.Windows.Forms
$tb = New-Object System.Windows.Forms.TextBox
$tb.Multiline = $true
$tb.Paste()
$tb.Text

Si vous n'avez pas de powershell , vous pouvez toujours compiler une application .NET simple pour vider le texte du presse-papiers sur la console. Voici un exemple C #. ( Inspiration )

using System;
using System.Threading;
using System.Windows.Forms;
class dummy {
    [STAThread]
    public static void Main() {
        if (Clipboard.ContainsText()) Console.Write(Clipboard.GetText());
    }
}

Voici un script batch qui combine les deux méthodes. Si powershell existe dans %PATH% , utilisez-le. Sinon, recherchez le compilateur / éditeur de liens C # et créez une application .NET temporaire. Comme vous pouvez le voir dans les commentaires du script de traitement par lots, vous pouvez capturer le contenu du presse-papiers à l'aide d'une boucle for /f ou simplement les transférer sur la console.

:: clipboard.bat
:: retrieves contents of clipboard

@echo off
setlocal enabledelayedexpansion

:: Does powershell.exe exist within %PATH%?
for %%I in (powershell.exe) do if "%%~$PATH:I" neq "" (
    set getclip=powershell "Add-Type -AssemblyName System.Windows.Forms;$tb=New-Object System.Windows.Forms.TextBox;$tb.Multiline=$true;$tb.Paste();$tb.Text"
) else (
rem :: If not, compose and link C# application to retrieve clipboard text
    set getclip=%temp%\getclip.exe
    >"%temp%\c.cs" echo using System;using System.Threading;using System.Windows.Forms;class dummy{[STAThread]
    >>"%temp%\c.cs" echo public static void Main^(^){if^(Clipboard.ContainsText^(^)^) Console.Write^(Clipboard.GetText^(^)^);}}
    for /f "delims=" %%I in ('dir /b /s "%windir%\microsoft.net\*csc.exe"') do (
        if not exist "!getclip!" "%%I" /nologo /out:"!getclip!" "%temp%\c.cs" 2>NUL
    )
    del "%temp%\c.cs"
    if not exist "!getclip!" (
        echo Error: Please install .NET 2.0 or newer, or install PowerShell.
        goto :EOF
    )
)

:: If you want to process the contents of the clipboard line-by-line, use
:: something like this to preserve blank lines:
for /f "delims=" %%I in ('%getclip% ^| findstr /n "^"') do (
    set "line=%%I" & set "line=!line:*:=!"
    echo(!line!
)

:: If all you need is to output the clipboard text to the console without
:: any processing, then remove the above "for /f" loop and uncomment the
:: following line:

:: %getclip%

:: Clean up the mess
del "%temp%\getclip.exe" 2>NUL
goto :EOF




clipboard