我正在为一个朋友编写一个批处理脚本,它需要一个输入,即网站网址。他们不是最高级的用户,所以我想让它尽可能简单;我希望他们将网址复制到剪贴板中,只需单击文件即可script.bat
。
.\executable.exe InsertClipboardHere -a --million "arguments"
有没有办法从批处理脚本访问剪贴板的内容,而无需任何“高级”实用程序(如 Windows Powershell 或外部程序)?
答案1
观察:- 这个答案适用于那些想要这样的东西并且不再想下载字符串工具的用户。
1)我在这种工作中使用了这个解决方案,但显然这也不简单,除了使用系统中可用的外部工具之外。
2)基本上,使用 C# 代码在运行时进行粘贴。
这@Narzard评论 100%正确,我花了很多时间尝试与您要求的相同方法,但我找不到尽可能简单的解决方案……这是我决定在我的 Bat 代码中实现的解决方案:
@echo off & setlocal EnableDelayedExpansion
set "_out=%temp%\Paste.cs" & set "_csc="%windir%\Microsoft.NET" "csc.exe""
set _arg=/target:exe /out:"!_out:~0,-2!exe" "!_out!" /platform:anycpu & > "!_out!" (
echo/using System^;using System^.Windows^.Forms^;using System^.Threading^;namespace Huddled^{
echo/public class Paste^{[STAThread]static void Main^(^)^{foreach^(string line in Clipboard.GetText^(^).Split^(
echo/new string[]^{"\r\n","\n"^},StringSplitOptions.None^)^)Console.WriteLine^(line^)^;^}^}^})
for /f %%i in ('%__appdir__%\where /r !_csc!')do "%%~i" !_arg! >nul && del /q /f "!_out!" & goto :_next
:_next
for /f tokens^=* %%i in ('"!_out:~0,-2!exe"')do .\executable.exe "%%~i" -a --million "arguments"
del /q /f "!_out:~0,-2!exe" 2>nul & rem: continue from here!
C#未在 .NET Framework x86/x64 中测试转义字符:
2.0.50727
3.5
4.0.30319
using System;
using System.Windows.Forms;
using System.Threading;
namespace Huddled
{
public class Paste
{
[STAThread] static void Main()
{
foreach(string line in Clipboard.GetText().Split(new string[]{"\r\n","\n"},StringSplitOptions.None))Console.WriteLine(line);
}
}
}
答案2
尝试:
.\executable.exe 粘贴 -a --million “参数”
命令变体: 粘贴 | 命令
将 Windows 剪贴板的内容粘贴到指定命令命令的输入中。
粘贴 | 命令 | 剪辑
将 Windows 剪贴板的内容粘贴到指定命令的输入中,然后将其输出复制到 Windows 剪贴板。
例如,paste | sort | clip 对 Windows 剪贴板的内容进行排序。需要:clip
粘贴 > 文件名
粘贴 > example.txt
将 Windows 剪贴板的内容粘贴到指定的文件名文件中。
粘贴 | 排序 > 文件名
对 Windows 剪贴板的内容进行排序,并将排序后的输出保存到指定的文件名文件中。