Avez-vous une idée de la façon d'accéder au presse-papiers de Windows à l'aide d'un fichier de commandes?
Pour définir le contenu du presse-papiers, comme l'ont dit Chris Thornton, klaatu et grappes d'autres personnes , utilisez %windir%\system32\clip.exe
.
Pour un one-liner rapide, vous pouvez 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 fonctionnera pas aussi rapidement que la solution JScript ci-dessous, mais cela présente l'avantage de la simplicité.
Merci Jonathan pour m'avoir signalé les capacités de l'objet mystérieux htmlfile
COM pour la récupération du 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 JScript et d’une ligne cscript
pour le déclencher, ce qui 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'));
Il est possible de récupérer le texte du Presse-papiers à partir de 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. ( La 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 powershell
, vous pouvez toujours compiler une application .NET simple pour transférer le texte du presse-papiers sur la console. Voici un exemple en 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/lieur C # et créez une application .NET temporaire. Comme vous pouvez le constater 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 dans 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
La commande clip permet de transférer du texte dans le presse-papiers, mais elle ne peut pas être lue dans le presse-papiers. Il existe 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 pour être assez gros.
Le meilleur outil que j'ai trouvé pour utiliser le presse-papiers à partir d'un script est l'outil gratuit NirCmd de Nirsoft.
http://www.nirsoft.net/utils/nircmd.html
Cela ressemble à un couteau suisse composé de commandes par lot regroupées dans un petit fichier .exe. Pour les commandes du presse-papiers, vous diriez quelque chose comme:
nircmd clipboard [Action] [Parameter]
De plus, vous pouvez faire directement référence au contenu du presse-papiers dans n’importe laquelle de ses commandes en utilisant sa variable ~ $ clipboard $ comme argument. Nircmd contient également des commandes permettant d'exécuter d'autres programmes ou des commandes. Il est donc possible de l'utiliser pour transmettre le contenu du presse-papiers en tant qu'argument aux autres commandes de traitement par lots.
Actions du presse-papier:
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 spéciale RTF ou HTML dans le presse-papiers. Toutefois, ceux-ci sont écrits sous forme de contenu utilisant un type de format de presse-papiers différent. pour accéder à ces formats, à moins que votre programme ne demande explicitement ce type de données au Presse-papiers.
La sortie de tuyauterie to dans le presse-papiers est fournie par clip, comme d’autres l’ont dit. Pour lire l'entrée de dans le presse-papiers, utilisez l'outil pclip dans this bundle . Et il y a des tonnes d'autres bonnes choses là-dedans.
Ainsi, par exemple, vous suivez un didacticiel en ligne et vous souhaitez créer un fichier avec le contenu du presse-papiers ...
c:\>pclip > MyNewFile.txt
ou vous voulez exécuter une commande copiée ...
c:\>pclip | cmd
Avec Vista ou une version ultérieure, il est intégré. Il vous suffit de diriger la sortie vers le programme "clip" . Voici un résumé (de moi): http://www.clipboardextender.com/general-clipboard-use/commande-window-output-to-clipboard-in-Vista Cet article contient également un lien vers un utilitaire gratuit (écrit par Moi, appelé) appelé Dos2Clip, qui peut être utilisé sous XP.
EDIT: Je vois que j'ai la question à l'envers, ma solution OUTPUTS dans le presse-papier, ne la lit pas. Pardon!
Mise à jour: avec Dos2Clip, Clip2Dos (dans le même fichier Zip) envoie le texte du presse-papiers à la sortie standard. Donc, cela devrait fonctionner pour vous. La source Pascal est incluse dans le fichier Zip.
Pour récupérer le contenu du presse-papiers à partir de votre script de traitement par lots: il n’existe pas de solution de traitement par lots «pure».
Si vous souhaitez intégrer une solution 100% batch, vous devez générer l’autre fichier de langue à partir de votre lot.
Ce n'est peut-être pas la réponse exacte, mais ce sera utile pour votre quête.
Message original: Visitez https://groups.google.com/d/msg/alt.msdos.batch/0n8icUar5AM/60uEZFn9IfAJInterrogé par Roger Hunt William Allen répond
Étapes beaucoup plus propres:
Étape 1) créez un fichier 'bat' nommé Copy.bat dans le bureau à l'aide de n'importe quel éditeur de texte, copiez et collez le code ci-dessous et enregistrez-le.
@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 H Drive) ou n’importe où, assurez-vous de mettre à jour le chemin d’accès dans le fichier Copy.bat sous «FN = H:\CLIP.txt». avec votre chemin de fichier de destination.
C'est tout.
Donc, lorsque vous copiez n’importe quel texte de n’importe où et que vous exécutez le fichier Copy.bat à partir du bureau, il met à jour le fichier CLIP.txt avec le contenu du Presse-papiers et le sauvegarde.
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.